Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从父窗口中的子窗口运行函数_Javascript_Html_Popup_Window - Fatal编程技术网

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

Javascript 从父窗口中的子窗口运行函数,javascript,html,popup,window,Javascript,Html,Popup,Window,我有两个窗口:父窗口和弹出窗口。显然,parent引用了popup。现在在弹出窗口中我有一个函数 function test() { alert('test'); } 我想在parent中调用这个函数,类似于popup.test()。有办法吗?我知道怎么用另一种方法。只是宣布 window.test = function() { alert('test'); } 并调用window.opener.test()在弹出窗口中工作正常。但是,这在我的情况下不起作用(我认为是因为window.ope

我有两个窗口:父窗口和弹出窗口。显然,
parent
引用了
popup
。现在在
弹出窗口中
我有一个函数

function test() { alert('test'); }
我想在
parent
中调用这个函数,类似于
popup.test()。有办法吗?我知道怎么用另一种方法。只是宣布

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

并调用
window.opener.test()在弹出窗口中工作正常。但是,这在我的情况下不起作用(我认为是因为
window.opener
对象是一个引用,但是
window.open
popup
中的
window
实际上并不相关)。有什么想法吗?

这取决于您为弹出窗口定义函数的上下文。假设将函数/数据附加到弹出窗口的
窗口
对象,则可以从
窗口返回的窗口句柄访问它。打开
(窗口句柄是弹出窗口的
窗口
对象):

我假设您了解安全沙盒如何在弹出窗口中工作,如下所示:

window["test"] = function()
{
  alert("It works!");
}
然后从主窗口打开弹出窗口:

var popup = window.open("popup.html", "The popup");
并调用您的函数:

popup.window.test();

jsiddle(由于跨域限制,没有
/show
就无法工作!):

实际上该函数是在
弹出窗口中定义的。我需要访问popup的html。好吧,我想我可以重构我的代码,这样这个解决方案就足够好了。:)我会记下你的答案,谢谢!访问窗口句柄后,您可以在
w.document
处访问窗口的文档,这将允许您调用
w.document.getElementById
或您需要的任何其他函数。在窗口之间传递数据时一定要小心。一个窗口中的对象在另一个窗口中的行为可能会异常,具体取决于调用它的上下文。您的URL是否在同一个域上?是的,它们是。我用的是Chrome。实际上,
弹出窗口
根本没有URL。它是空白的,内容通过
弹出式.document.write插入。
popup.window.test();