下面是一段代码,它使用脚本填充 iframe 的内容:
<!doctype html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(document).ready(function() {
$('iframe').contents().find('body').html('<script>console.log($("div"))<\/script>');
});
</script>
</head>
<body>
<div>Test</div>
<iframe />
</body>
</html>
执行时,我们看到 iframe 可以访问父级的 DOM,并且我们看到 jQuery 选择器选择了 div。iframe 不包含 jQuery,但它可以访问父级的 jQuery 对象。
但是,如果我们通过 iframe src 包含来编写相同的内容,则行为会有所不同:
测试.html:
<!doctype html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<div>Test</div>
<iframe src="another.html">
</body>
</html>
另一个.html:
<!doctype html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(document).ready(function() {
console.log($('div'));
});
</script>
</head>
<body>
</body>
</html>
我们现在看到该页面没有列出任何 div。此外,如果我们在子页面中不包含 jQuery js,它会抛出错误。
请注意,两个页面都在同一个域中,因此我们没有同源策略问题。
我的问题是:
- 为什么 2 - a 的行为不同。从父级和 b. 操作 iframe DOM。包括通过 src 的 iframe 内容?
- 有没有办法让父母可以访问孩子,反之亦然?