Tom*_*idd 68 javascript browser
我有一个页面,它产生一个弹出浏览器窗口.我在父浏览器窗口中有一个JavaScript变量,我想将它传递给弹出的浏览器窗口.
有没有办法做到这一点?我知道这可以在同一浏览器窗口中的帧之间完成,但我不确定它是否可以跨浏览器窗口完成.
Vic*_*tor 99
把代码放到这个问题上,您可以从父窗口执行此操作:
var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;
Run Code Online (Sandbox Code Playgroud)
或者在新窗口中显示:
var myVariable = window.opener.thisIsAnObject;
Run Code Online (Sandbox Code Playgroud)
我更喜欢后者,因为您可能需要等待新页面加载,以便您可以访问其元素或任何您想要的内容.
Mar*_*rkR 41
如果窗口来自同一个安全域,并且您有另一个窗口的引用,那么.
Javascript的open()方法返回对创建的窗口的引用(如果它重用现有窗口,则返回现有窗口).以这种方式创建的每个窗口都会获得一个应用于它的属性"window.opener",指向创建它的窗口.
然后,可以使用DOM(取决于安全性)来访问另一个的属性,或其文档,框架等.
是的,脚本可以访问它们具有句柄的同一域中的其他窗口的属性(通常通过window.open/opener和window.frames/parent获得).调用另一个窗口上定义的函数通常更易于管理,而不是直接调整变量.
但是,Windows可能会死亡或继续运行,浏览器会在不同时处理它.在尝试调用之前,检查窗口(a)是否仍然打开(!window.closed)和(b)是否具有您期望的功能.
像字符串这样的简单值很好,但通常在窗口之间传递复杂对象(如函数,DOM元素和闭包)并不是一个好主意.如果子窗口从其开启器中存储对象,则开启器关闭,该对象可能变为"死"(在某些浏览器中,如IE),或导致内存泄漏.奇怪的错误随之而来.
小智 6
在窗口之间传递变量(如果您的窗口在同一个域中)可以通过以下方式轻松完成:
小智 5
可以将消息从“父”窗口传递到“子”窗口:
在“父窗口”中打开子窗口
var win = window.open(<window.location.href>, '_blank');
setTimeout(function(){
win.postMessage(SRFBfromEBNF,"*")
},1000);
win.focus();
Run Code Online (Sandbox Code Playgroud)
根据上下文替换
在‘孩子’里
window.addEventListener('message', function(event) {
if(event.srcElement.location.href==window.location.href){
/* do what you want with event.data */
}
});
Run Code Online (Sandbox Code Playgroud)
if 测试必须根据上下文进行更改
归档时间: |
|
查看次数: |
138827 次 |
最近记录: |