Do框架和iframe有独立的javascript上下文
Do frames and iframes have isolated javascript contexts?
我在Chrome中做了一些实验,但我不确定,所以我需要确认:
我认为iframe和框架有一个单独的JavaScript上下文,使它们不可能在这些框架/iframe之间共享变量是正确的吗?
为了简化,让我们假设客户端将始终是相同版本的Chrome(这是我的情况)
可以。
但是,您可以使用frames
集合或parent
来访问其他帧(假设它们来自同一域)。
在帧之间共享值并非"不可能",但您必须小心。在Internet Explorer中,以下情况将导致错误:
- 在框架a中创建一个JavaScript对象。
- 将JavaScript对象传递给帧B中的函数,该函数将值保存在某处(在帧B中)
- Frame A被重新加载为一个新页面
- 帧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提供的答案完全适用。
相关文章:
- 将函数的上下文应用于javascript变量
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- File Upload事件上下文和javascript
- 什么's在javascript'的优化上下文
- 如何将javascript框架注入ChakraBridge上下文
- 如何在 v8 中正确恢复 Javascript 上下文
- 移动平台 Web 浏览器中的 JavaScript 上下文菜单和工具提示
- 如何在单击后隐藏或禁用JavaScript上下文菜单中的选项
- AMD:JavaScript上下文的目的是什么
- 智能 JavaScript 上下文菜单
- JavaFXWebView-弹出Javascript上下文菜单
- 以下代码的 Javascript 上下文
- 替换javascript上下文.带图像的圆弧
- Javascript上下文菜单到c#
- Do框架和iframe有独立的javascript上下文
- 传递类对象到javascript上下文objective C
- 正确的语法以保留原型的javascript上下文
- 节点JavaScript上下文共享内置原型
- 可隐藏'可回收'Javascript上下文工具栏
- 一个Javascript上下文菜单