从父窗口中的子窗口运行函数
问题描述:
我有两个窗口:parent
和popup
。显然parent
有参考popup
。现在popup
我有一个函数说从父窗口中的子窗口运行函数
function test() { alert('test'); }
,我想调用这个函数在parent
,像popup.test();
。有没有办法做到这一点?我知道如何以相反的方式做到这一点。只要声明
window.test = function() { alert('test'); }
并在弹出窗口调用window.opener.test();
工作正常。然而,这不适用于我的情况(我认为因为window.opener
对象是一个参考,但window.open
和window
在popup
没有真正相关)。有任何想法吗?
答
它确实取决于您为弹出窗口定义函数的上下文。假设你随附的功能/数据,以弹出窗口的window
对象时,可以从窗口访问句柄window.open
返回(窗口处理是用于弹出的window
对象):
var w = window.open(somelocation,''); //has a function on `window` called "test"
w.test();
我会假设你懂得安全沙箱中的弹出窗口的工作方式
答
在弹出声明test()
如下:
window["test"] = function()
{
alert("It works!");
}
然后从主窗口中打开弹出式窗口:
var popup = window.open("popup.html", "The popup");
,并致电功能:(!没有/show
因为跨域限制将无法正常工作)
popup.window.test();
的jsfiddle :http://jsfiddle.net/szK3F/show/
其实这个函数是在'popup'里面定义的。我需要访问弹出的HTML。 – freakish
那么,我想我可以重构我的代码,所以这个解决方案将足够好。 :)我会标记你的答案,谢谢! – freakish
一旦你有权访问窗口句柄,就可以通过'w.document'访问窗口的文档,这将允许你调用'w.document.getElementById'或者其他你需要的函数。在Windows之间传递数据时要小心。一个窗口中的对象可能会在另一个窗口中出现奇怪的情况,这取决于调用它的上下文。 – zzzzBov