Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果JavaScript代码是';在一个<;iframe>;?_Javascript_Html_Iframe_Namespaces - Fatal编程技术网

如果JavaScript代码是';在一个<;iframe>;?

如果JavaScript代码是';在一个<;iframe>;?,javascript,html,iframe,namespaces,Javascript,Html,Iframe,Namespaces,如果我编写了一些在中运行的JavaScript(如果有必要的话,它是用JavaScript动态创建并添加到DOM中的),它是与其父页面的全局名称空间隔离的,还是仍然可能发生冲突 我在谷歌上搜索了一下,看到了这个页面,但我真的搞不懂他在这里做什么,也弄不清楚这是否适用于我试图确定/完成的事情 我正在创建一个小部件,它将生活在未知的主机页面上;它是一个在页面上插入,然后创建一个文档,加载一些外部脚本并将该文档插入动态创建的 基本上,我只是想避免与主机页上的任何全局变量发生冲突;我不希望在中编写或加

如果我编写了一些在中运行的JavaScript(如果有必要的话,它是用JavaScript动态创建并添加到DOM中的),它是与其父页面的全局名称空间隔离的,还是仍然可能发生冲突

我在谷歌上搜索了一下,看到了这个页面,但我真的搞不懂他在这里做什么,也弄不清楚这是否适用于我试图确定/完成的事情

我正在创建一个小部件,它将生活在未知的主机页面上;它是一个在页面上插入,然后创建一个文档,加载一些外部脚本并将该文档插入动态创建的

基本上,我只是想避免与主机页上的任何全局变量发生冲突;我不希望在中编写或加载的任何Java脚本与主机页上的任何内容冲突

如果使用A不能自动保护我,有谁能推荐一种方法来隔离在中运行的任何s


提前感谢您的指导。

如果我正确理解您的情况,iFrame中的任何内容都应该超出页面其余部分的范围。但是,您可以使用
parent
引用主页代码

var foo

<iframe>
var bar = parent.foo;
</iframe>
var foo
var bar=parent.foo;

我知道这不是iframe的外观。只是想简化一下。

通常情况下,iframe和主窗口中的脚本都是相互隔离的

main.html

<!DOCTYPE html>
<html><head>
</head>
<body>
<script>
function ale(){alert('test');}
</script>
<iframe src="fr.html"></iframe>

</body></html>
<input type="button" onclick="ale();" />

函数ale(){alert('test');}
fr.html

<!DOCTYPE html>
<html><head>
</head>
<body>
<script>
function ale(){alert('test');}
</script>
<iframe src="fr.html"></iframe>

</body></html>
<input type="button" onclick="ale();" />

请注意,当打开main.html并单击iframe中的按钮时,会出现一个Javascript错误,表示ale();将生成未定义的。这是因为它们是两个独立的文档

但是,您可以使用
window.parent
节点从iframe访问父框架的文档对象。e、 g.
window.parent.getElementById('mainform')

摘要
不需要在iframe中为代码命名名称空间。

因为每个代码的名称空间是分开的,所以应该可以。考虑下面的

主机页JavaScript:

Foo = {};
Foo.bar = function(){ alert('hi!');}
Foo = {};
Foo.bar = function(){ alert('yo!');}
现在,iframe JavaScript:

Foo = {};
Foo.bar = function(){ alert('hi!');}
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!'

很好的解释!非常感谢,这回答了我的问题。谢谢,莫里斯!这正是我所怀疑的,但我想确定我没有遗漏或误解什么。