如果我编写一些在< iframe>中运行的JavaScript (动态创建并使用JavaScript添加到DOM中,如果这很重要),它是否与其父页面的全局命名空间隔离,或者仍然存在冲突?
我做了一些谷歌搜索并遇到了这个页面,但是我无法理解他在这里所做的事情,或者它是否适用于我正在努力确定/完成的事情。
http://dean.edwards.name/weblog/2006/11/sandbox/
我正在创建一个将存在于未知主机页面上的小部件;这是一个< script>插入< iframe>在页面上,然后创建一个文档,加载一些外部脚本并将该文档插入动态创建的< iframe&gt ;.
基本上,我只想避免与主页上的任何全局变量冲突;我不想要在< iframe>中编写或加载任何JavaScripts。与主页上的任何内容冲突。
如果使用< iframe>不会自动保护我,任何人都可以推荐一种方法来隔离在< iframe>中运行的任何< script>?
提前感谢任何指导。
答案 0 :(得分:8)
因为每个命名空间都是分开的,所以应该没问题。请考虑以下
主页JavaScript:
Foo = {};
Foo.bar = function(){ alert('hi!');}
现在是iframe JavaScript:
Foo = {};
Foo.bar = function(){ alert('yo!');}
要让iframe与父母交谈,就必须这样做
window.parent.Foo.bar(); //Alerts 'hi!'
Foo.bar(); //Alerts 'yo!'
要让主页查看框架,必须执行此操作:
window.frames['nameOfFrame'].contentWindow.Foo.bar(); //Alerts 'yo!'
Foo.bar(); //Alerts 'hi!'
答案 1 :(得分:1)
如果我理解您的情况,iFrame中的任何内容都应超出页面其他部分的范围。但是,您可以使用parent
来反映主页代码。
var foo
<iframe>
var bar = parent.foo;
</iframe>
我知道这不是iframe的样子。只是想简化。
答案 2 :(得分:1)
正常使用,iframe和主窗口中的脚本彼此隔离。
<强> main.html中强>:
<!DOCTYPE html>
<html><head>
</head>
<body>
<script>
function ale(){alert('test');}
</script>
<iframe src="fr.html"></iframe>
</body></html>
<强> fr.html 强>:
<input type="button" onclick="ale();" />
请注意,当您打开main.html并单击iframe中的按钮时,会出现一个Javascript错误,指出ale();未定义将生成。这是因为它们是2个单独的文件。
但是,您将能够使用window.parent
节点从iframe访问父框架的文档对象。例如window.parent.getElementById('mainform')
<强>摘要强> 您无需在iframe中命名代码。