我有一个页面,弹出一个浏览器窗口。我在父浏览器窗口中有一个JavaScript变量,我想将它传递给弹出的浏览器窗口。
有没有办法做到这一点?我知道这可以在同一浏览器窗口中跨框架完成,但我不确定是否可以跨浏览器窗口完成。
发布于 2008-09-17 20:38:26
如果这两个窗口来自相同的安全域,并且您有对另一个窗口的引用,则可以。
Javascript的open()方法返回对创建的窗口的引用(如果重用现有窗口,则返回对现有窗口的引用)。以这种方式创建的每个窗口都会有一个属性"window.opener“应用于它,指向创建它的窗口。
然后,任何一个都可以使用DOM (取决于安全性)来访问另一个的属性,或者它的文档、框架等。
发布于 2008-09-17 21:14:36
就代码而言,您可以在父窗口中执行此操作:
var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;
或者在新窗口中执行以下操作:
var myVariable = window.opener.thisIsAnObject;
我更喜欢后者,因为您可能需要等待新页面加载,这样才能访问它的元素或您想要的任何内容。
发布于 2008-09-17 21:17:57
是的,脚本可以访问相同域中它们拥有句柄的其他窗口的属性(通常通过window.open/opener和window.frame/parent获得)。调用在另一个窗口中定义的函数通常比直接处理变量更易于管理。
然而,windows可以消亡,也可以继续移动,而浏览器在发生这种情况时会以不同的方式处理。在尝试调用窗口之前,请检查窗口(a)是否仍处于打开状态(!window.closed)以及(b)是否具有所需的可用函数。
像字符串这样的简单值是可以的,但通常在窗口之间传递复杂对象不是一个好主意。如果子窗口存储来自其打开程序的对象,则打开程序关闭,该对象可能会“死”(在某些浏览器中,如IE),或导致内存泄漏。奇怪的错误可能随之而来。
https://stackoverflow.com/questions/87359
复制相似问题