从父窗口中的子窗口运行函数

问题描述:

我有两个窗口:parentpopup。显然parent有参考popup。现在popup我有一个函数说从父窗口中的子窗口运行函数

function test() { alert('test'); } 

,我想调用这个函数在parent,像popup.test();。有没有办法做到这一点?我知道如何以相反的方式做到这一点。只要声明

window.test = function() { alert('test'); } 

并在弹出窗口调用window.opener.test();工作正常。然而,这不适用于我的情况(我认为因为window.opener对象是一个参考,但window.openwindowpopup没有真正相关)。有任何想法吗?

它确实取决于您为弹出窗口定义函数的上下文。假设你随附的功能/数据,以弹出窗口的window对象时,可以从窗口访问句柄window.open返回(窗口处理用于弹出的window对象):

var w = window.open(somelocation,''); //has a function on `window` called "test" 
w.test(); 

我会假设你懂得安全沙箱中的弹出窗口的工作方式

+0

其实这个函数是在'popup'里面定义的。我需要访问弹出的HTML。 – freakish

+0

那么,我想我可以重构我的代码,所以这个解决方案将足够好。 :)我会标记你的答案,谢谢! – freakish

+0

一旦你有权访问窗口句柄,就可以通过'w.document'访问窗口的文档,这将允许你调用'w.document.getElementById'或者其他你需要的函数。在Windows之间传递数据时要小心。一个窗口中的对象可能会在另一个窗口中出现奇怪的情况,这取决于调用它的上下文。 – zzzzBov

在弹出声明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/

+0

我试过这个,它不起作用。 :(无论如何,请多多指教! – freakish

+0

你的网址是否在同一个域名中? – ComFreek

+0

是的,他们是。我使用的是Chrome。实际上'popup'根本没有网址,它是空白的,内容是通过'popup.document .write'。 – freakish