【发布时间】:2013-10-04 23:41:28
【问题描述】:
这是一段使用脚本填充 iframe 内容的 sn-p 代码:
<!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 包含编写相同的内容,则行为会有所不同:
test.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 内容?
- 有没有办法让父母可以访问孩子而不是相反?
【问题讨论】:
-
你能澄清一下你的测试用例吗?你在测试什么?测试用例并不相等。
-
让我澄清一下 - 一方面我通过 jQuery 以编程方式在 iframe 中生成 HTML,另一方面我通过包含包含代码的 src 来实现。如果你愿意,我会让它变得相似,但如果我这样做,第二个会抛出错误。如果看到2的输出,第一个返回父页面的div,第二个没有。
标签: javascript jquery iframe