我需要在弹出窗口(使用window.open
)关闭之前执行一些操作。
类似的东西会很好:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
我怎样才能做到这一点?
答案 0 :(得分:74)
只要弹出窗口网址与父页面位于同一个域中,您的示例就会,并且您将事件更改为全部小写:
var new_window = window.open('some url')
new_window.onbeforeunload = function(){ my code}
答案 1 :(得分:32)
虽然接受的答案对于相同的起源是正确的,但我找到了一个跨源弹出窗口的解决方案:
401 Unauthorised Page
对于那些考虑使用它的人。
即使Facebook在他们的Javascript SDK中使用这种“黑客”。
您可以通过查看代码来验证这一点。只需在https://connect.facebook.net/en_US/sdk.js中搜索var win = window.open('http://www.google.com');
var timer = setInterval(function() {
if(win.closed) {
clearInterval(timer);
alert('closed');
}
}, 1000);
。
答案 2 :(得分:13)
事件名称为onbeforeunload
,而非onBeforeUnload
。 JS区分大小写。
答案 3 :(得分:5)
您需要将onbeforeunload
事件绑定到打开后的窗口。
最简单的方法是在窗口源代码中使用javascript onbeforeunload代码。
答案 4 :(得分:1)
如上所述,您需要在打开之后将onbeforeunload事件绑定到窗口。
参见其他帖子中的示例:https://stackoverflow.com/a/25989253/578275。
答案 5 :(得分:1)
onbeforeunload
事件 。例如,您可以将其添加到其加载事件的末尾,如下所示;
const new_window = window.open('some url')
new_window.onload = function(){
/* my code */
this.onbeforeunload = function(){ /* my code */ }
}
答案 6 :(得分:0)
您可能不想覆盖 onbeforeunload
的值,因为如果它也使用该钩子,这会干扰弹出窗口的处理程序。
改用 addEventListener('beforeunload', ...)
。
const wnd = window.open(theUrl)
wnd.addEventListener('beforeunload', () => {
// do stuff
})
请注意,事件存在其他选项,例如 unload
和 pageHide
。阅读文档以了解哪种事件最适合您的实施。
供参考:
https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event
https://developer.mozilla.org/en-US/docs/Web/API/Window/pagehide_event
有关页面生命周期的概述,请参阅:
答案 7 :(得分:-1)
var new_window = window.open('some_url')
您还可以检查new_window.window
是否为null
。但您需要使用setTimeout
或setInterval
函数手动检查它。
这是btw当你不在同一个域时如何检查它的唯一方法。