框架和iframe是否具有隔离的javascript上下文?

Kla*_*aim 8 html javascript

我在Chrome上做了一些实验,但我不确定所以我需要确认:

我是否认为iframe和框架具有单独的JavaScript上下文,这使得它们无法在这些框架/ iframe之间共享变量?

为了简化,我们假设客户端将始终是Chrome的相同版本(这是我的情况)

SLa*_*aks 9

是.

但是,您可以使用frames集合或parent访问其他框架(假设它们来自同一个域).


Poi*_*nty 7

在帧之间共享值并非"不可能",但你必须要小心.在Internet Explorer中,以下方案将导致错误:

  1. 在框架A中创建一个JavaScript对象.
  2. 将JavaScript对象传递给帧B中的函数,该函数将值保存在某处(在帧B中)
  3. 帧A重新加载新页面
  4. 帧B中的代码尝试从(前)帧A引用保存的对象.

当引用已失效页面中的对象时,Internet Explorer不喜欢它.


Esa*_*ija 5

好吧,它们只是具有不同的全局对象和全局范围。但是,如果它们在同一个域中,则可以彼此运行代码。但是,如果要执行此操作(在父窗口中):

document.getElementById( "myiframe" ).contentWindow.window.globalArray = [];
Run Code Online (Sandbox Code Playgroud)

这会globalArray在iframe的全局范围内创建一个全局变量。

然后在iframe中

console.log( globalArray instanceof Array );

将返回,false因为Array引用了iframe的Array构造函数。你必须要做

console.log( globalArray instanceof top.Array );
Run Code Online (Sandbox Code Playgroud)

其中,top是指容器窗口的全局对象。

jsfiddle:http : //jsfiddle.net/EFbtN/