Answers:
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
您可以更简单地写:
var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
并返回第一个有效的内部文档。
一旦获得内部文档,就可以像访问当前页面上的任何元素一样访问内部文档。(innerDoc.getElementById
...等)
重要提示:请确保iframe位于同一域中,否则您将无法访问其内部。那将是跨站点脚本。
加载后,请不要忘记访问iframe 。没有jQuery的古老但可靠的方法:
<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>
<script>
function access() {
var iframe = document.getElementById("iframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
console.log(innerDoc.body);
}
</script>
以上答案给出了使用Javscript的好的解决方案。这是一个简单的jQuery解决方案:
$('#iframeId').contents().find('div')
这里的窍门是jQuery的.contents()
方法,不同于.children()
只能获取HTML元素,.contents()
可以同时获取文本节点和HTML元素的方法。这就是为什么可以通过使用它获取iframe的文档内容的原因。
有关jQuery的进一步阅读.contents()
:.contents()
请注意,iframe和页面必须位于同一域中。
如果iframe不在同一个域中,以致您无法从父级访问其内部结构,但可以修改iframe的源代码,则可以修改iframe所显示的页面以将消息发送到父级窗口,从而允许您可以在页面之间共享信息。一些来源:
以下代码将帮助您找出iframe数据。
let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;