如果它位于<iframe>?</iframe>中,我是否需要命名我的JavaScript代码

时间:2009-10-31 02:45:09

标签: javascript html iframe namespaces

如果我编写一些在&lt; iframe&gt;中运行的JavaScript (动态创建并使用JavaScript添加到DOM中,如果这很重要),它是否与其父页面的全局命名空间隔离,或者仍然存在冲突?

我做了一些谷歌搜索并遇到了这个页面,但是我无法理解他在这里所做的事情,或者它是否适用于我正在努力确定/完成的事情。

http://dean.edwards.name/weblog/2006/11/sandbox/

我正在创建一个将存在于未知主机页面上的小部件;这是一个&lt; script&gt;插入&lt; iframe&gt;在页面上,然后创建一个文档,加载一些外部脚本并将该文档插入动态创建的&lt; iframe&gt ;.

基本上,我只想避免与主页上的任何全局变量冲突;我不想要在&lt; iframe&gt;中编写或加载任何JavaScripts。与主页上的任何内容冲突。

如果使用&lt; iframe&gt;不会自动保护我,任何人都可以推荐一种方法来隔离在&lt; iframe&gt;中运行的任何&lt; script&gt;?

提前感谢任何指导。

3 个答案:

答案 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中命名代码。