Do框架和iframe有独立的javascript上下文

Do frames and iframes have isolated javascript contexts?

本文关键字:javascript 上下文 独立 框架 iframe Do      更新时间:2023-09-26

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

我认为iframe和框架有一个单独的JavaScript上下文,使它们不可能在这些框架/iframe之间共享变量是正确的吗?

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

可以。

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

在帧之间共享值并非"不可能",但您必须小心。在Internet Explorer中,以下情况将导致错误:

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

Internet Explorer不喜欢从已失效的页面中引用对象。

它们只是有不同的全局对象和全局作用域。但是,如果它们位于同一域中,则可以在其中一个域中运行代码。但是如果你要这样做(在父窗口内):

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/

上下文的分离不是在框架之间,而是在域之间。这意味着如果你用域A加载框架A,用域B加载框架B,那么框架A中的javascript就不能访问域B的上下文。查看更详细的说明

编辑:当然,如果它们在同一域中,那么SLaks提供的答案完全适用。