我有一个页面,它产生一个弹出浏览器窗口.我在父浏览器窗口中有一个JavaScript变量,我想将它传递给弹出的浏览器窗口.
有没有办法做到这一点?我知道这可以在同一浏览器窗口中的帧之间完成,但我不确定它是否可以跨浏览器窗口完成.
把代码放到这个问题上,您可以从父窗口执行此操作:
var thisIsAnObject = {foo:'bar'}; var w = window.open("http://example.com"); w.myVariable = thisIsAnObject;
或者在新窗口中显示:
var myVariable = window.opener.thisIsAnObject;
我更喜欢后者,因为您可能需要等待新页面加载,以便您可以访问其元素或任何您想要的内容.
如果窗口来自同一个安全域,并且您有另一个窗口的引用,那么.
Javascript的open()方法返回对创建的窗口的引用(如果它重用现有窗口,则返回现有窗口).以这种方式创建的每个窗口都会获得一个应用于它的属性"window.opener",指向创建它的窗口.
然后,可以使用DOM(取决于安全性)来访问另一个的属性,或其文档,框架等.
是的,脚本可以访问它们具有句柄的同一域中的其他窗口的属性(通常通过window.open/opener和window.frames/parent获得).调用另一个窗口上定义的函数通常更易于管理,而不是直接调整变量.
但是,Windows可能会死亡或继续运行,浏览器会在不同时处理它.在尝试调用之前,检查窗口(a)是否仍然打开(!window.closed)和(b)是否具有您期望的功能.
像字符串这样的简单值很好,但通常在窗口之间传递复杂对象(如函数,DOM元素和闭包)并不是一个好主意.如果子窗口从其开启器中存储对象,则开启器关闭,该对象可能变为"死"(在某些浏览器中,如IE),或导致内存泄漏.奇怪的错误随之而来.