在javascript中将回调函数设置为新窗口

IT技术 javascript html callback new-window
2021-03-04 01:05:04

有没有一种简单的方法可以将“回调”函数设置为在 javascript 中打开的新窗口?我想从新窗口运行父级的函数,但我希望父级能够设置此特定函数的名称(因此不应在新窗口页面中对其进行硬编码)。

例如在父母我有:

function DoSomething { alert('Something'); }
...
<input type="button" onClick="OpenNewWindow(linktonewwindow,DoSomething);" />

在子窗口中,我想:

<input type="button" onClick="RunCallbackFunction();" />

问题是如何创建 thisOpenNewWindowRunCallbackFunction函数。我虽然将函数的名称作为查询参数发送到新窗口(服务器端脚本在生成的孩子的 HTML 中生成适当的函数调用),但我在想是否有另一种或更好的方法来完成这,也许甚至不需要服务器端修补的东西。

纯 javascript、服务器端解决方案和 jQuery(或其他框架)都受到欢迎。

2个回答

更新评论: 如果您通过window.open()then 在您的子页面中打开您的窗口,您可以在子页面中设置一个函数作为指向父函数的引用,因此在子页面中设置它:

var RunCallbackFunction = function() { }; //reference holder only

然后在您的父窗口(开启程序)中,在子窗口加载时设置该函数,如下所示:

//random function you want to call
function myFunc() { alert("I'm a function in the parent window"); }

//to actually open the window..
var win = window.open("window.html");
win.onload = function() { win.RunCallbackFunction = myFunc; };

这会将您的父级中的函数指定为该子级的目标……如果您愿意,您可以将每个子级指向不同的函数,它们都是独立的。

@SztupY - 然后只需更改代码以在子窗口中执行相同的引用,稍后我将调整答案。
2021-04-23 01:05:04
我如何使用 onClick 按钮而不是使用 onload 方法来完成这项工作?
2021-04-23 01:05:04
我不想在子窗口中硬编码函数的名称。那是一个要求。父窗口可能有多个地方打开同一个子窗口,但具有不同的回调函数。
2021-04-29 01:05:04
但是如果父对象打开多个窗口,每个窗口如何知道要调用哪个函数?它们都会调用设置的最新函数。
2021-05-03 01:05:04
@SztupY - 检查更新的答案,应该是你想要的:)
2021-05-04 01:05:04
var newWindow = window.open(window.location.origin);

newWindow.onload = function() {
    $(newWindow.document.body).addClass('new-window-body-class');
};
我不太明白这如何回答问题,甚至是如何帮助它。
2021-04-22 01:05:04