由于浏览器安全策略的限制,iframe的src地址必须为同域才可以获取内容。
我做了一个案例,分别创建了一个父页面(parent.html)以及一个子页面(children.html)。代码如下:
父页面(parent.html):
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8">
<title>我的父页面</title>
</head>
<body>
<iframe src="children.html" frameborder="0"></iframe>
<script type="text/javascript">
//获取iframe的对象。
var iframe = document.querySelector('iframe')
//必须使用onload来确保iframe页面内容加载完毕后再获取。
//如果在未渲染完毕就获取,将得到“空”的结果。
iframe.onload = function(){
//先通过contentDocument获取iframe的文档对象。
//再通过querySelector来获取body的对象。
//最后使用innerHTML来获取body的HTML内容。并打印。
alert(iframe.contentDocument.querySelector("body").innerHTML)
}
</script>
</body>
</html>
子页面(children.html):
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8">
<title>我的子页面</title>
</head>
<body>
<p>我是子页面P元素的内容</p>
<div id="name">我是子页面ID为name的内容</div>
</body>
</html>
其中在父页面中书写了获取子页面内容的JavaScript代码。
示例中是获取子页面body中的全部内容。结果如下:
给每个iframe加上id,去不同的id名,window.top.document.getElementById("id名").contentWindow获取这个iframe的window对象,然后console.log()输出一下父页面访问iframe的内容,只能是同域,或同一主域,通过设置相同document.domain才能访问,否则,父页面没有权限访问iframe的内容。如满足上述条件,只需为iframe绑定onload事件,然后用document.getElementById('#iframeId').contentWindow.location.href来得到当前iframe中页面的url。