我在Chrome中做了一些实验,但我不确定所以我需要确认:
我是否认为iframe和框架具有单独的JavaScript上下文,这使得它们无法在这些框架/ iframe之间共享变量?
为了简化,我们假设客户端将始终是Chrome的相同版本(这是我的情况)
答案 0 :(得分:9)
是
但是,您可以使用frames
集合或parent
访问其他框架(假设它们来自同一个网域)。
答案 1 :(得分:7)
在帧之间共享值并非“不可能”,但你必须要小心。在Internet Explorer中,以下方案将导致错误:
当引用已失效页面中的对象时,Internet Explorer不喜欢它。
答案 2 :(得分:5)
嗯,他们只有不同的全局对象和全局范围。但是,如果它们位于同一个域中,则可以在另一个域中运行代码。但是如果你这样做(在父窗口内):
document.getElementById( "myiframe" ).contentWindow.window.globalArray = [];
在iframe的全局范围内创建全局变量globalArray
。
然后在iframe内部
console.log( globalArray instanceof Array );
将返回false
,因为Array
引用了iframe的Array
构造函数。你必须要做
console.log( globalArray instanceof top.Array );
其中top
指的是容器窗口全局对象。
jsfiddle:http://jsfiddle.net/EFbtN/
答案 3 :(得分:1)
上下文的分离不在帧之间,而是在域之间。这意味着如果您将带有域A的帧A和带有域B的帧B加载,则来自帧A的javascript无法访问域B的上下文。请查看this以获得更长的解释。
编辑:当然,如果他们在同一个域上,SLaks提供的答案完全适用。