当前位置:  开发笔记 > 编程语言 > 正文

我可以将JavaScript变量传递给另一个浏览器窗口吗?

如何解决《我可以将JavaScript变量传递给另一个浏览器窗口吗?》经验,为你挑选了3个好方法。

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

有没有办法做到这一点?我知道这可以在同一浏览器窗口中的帧之间完成,但我不确定它是否可以跨浏览器窗口完成.



1> Victor..:

把代码放到这个问题上,您可以从父窗口执行此操作:

var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

或者在新窗口中显示:

var myVariable = window.opener.thisIsAnObject;

我更喜欢后者,因为您可能需要等待新页面加载,以便您可以访问其元素或任何您想要的内容.



2> MarkR..:

如果窗口来自同一个安全域,并且您有另一个窗口的引用,那么.

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

然后,可以使用DOM(取决于安全性)来访问另一个的属性,或其文档,框架等.


自从提出这个问题以来,情况发生了变化 现在,在[较新的浏览器](http://caniuse.com/#feat=x-doc-messaging)上,通过调用`window.postMessage,可以在*不同的*安全域上的窗口之间传递消息. `.

3> bobince..:

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

但是,Windows可能会死亡或继续运行,浏览器会在不同时处理它.在尝试调用之前,检查窗口(a)是否仍然打开(!window.closed)和(b)是否具有您期望的功能.

像字符串这样的简单值很好,但通常在窗口之间传递复杂对象(如函数,DOM元素和闭包)并不是一个好主意.如果子窗口从其开启器中存储对象,则开启器关闭,该对象可能变为"死"(在某些浏览器中,如IE),或导致内存泄漏.奇怪的错误随之而来.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有