首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以将JavaScript变量传递给另一个浏览器窗口?

是否可以将JavaScript变量传递给另一个浏览器窗口?
EN

Stack Overflow用户
提问于 2008-09-17 20:35:29
回答 12查看 157K关注 0票数 75

我有一个页面,弹出一个浏览器窗口。我在父浏览器窗口中有一个JavaScript变量,我想将它传递给弹出的浏览器窗口。

有没有办法做到这一点?我知道这可以在同一浏览器窗口中跨框架完成,但我不确定是否可以跨浏览器窗口完成。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-09-17 20:38:26

如果这两个窗口来自相同的安全域,并且您有对另一个窗口的引用,则可以。

Javascript的open()方法返回对创建的窗口的引用(如果重用现有窗口,则返回对现有窗口的引用)。以这种方式创建的每个窗口都会有一个属性"window.opener“应用于它,指向创建它的窗口。

然后,任何一个都可以使用DOM (取决于安全性)来访问另一个的属性,或者它的文档、框架等。

票数 46
EN

Stack Overflow用户

发布于 2008-09-17 21:14:36

就代码而言,您可以在父窗口中执行此操作:

代码语言:javascript
复制
var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

或者在新窗口中执行以下操作:

代码语言:javascript
复制
var myVariable = window.opener.thisIsAnObject;

我更喜欢后者,因为您可能需要等待新页面加载,这样才能访问它的元素或您想要的任何内容。

票数 113
EN

Stack Overflow用户

发布于 2008-09-17 21:17:57

是的,脚本可以访问相同域中它们拥有句柄的其他窗口的属性(通常通过window.open/opener和window.frame/parent获得)。调用在另一个窗口中定义的函数通常比直接处理变量更易于管理。

然而,windows可以消亡,也可以继续移动,而浏览器在发生这种情况时会以不同的方式处理。在尝试调用窗口之前,请检查窗口(a)是否仍处于打开状态(!window.closed)以及(b)是否具有所需的可用函数。

像字符串这样的简单值是可以的,但通常在窗口之间传递复杂对象不是一个好主意。如果子窗口存储来自其打开程序的对象,则打开程序关闭,该对象可能会“死”(在某些浏览器中,如IE),或导致内存泄漏。奇怪的错误可能随之而来。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/87359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档