我需要在弹出窗口(使用window.open
)关闭之前执行一些操作。
像这样的东西会很好:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
我怎样才能做到这一点?
我需要在弹出窗口(使用window.open
)关闭之前执行一些操作。
像这样的东西会很好:
var new_window = window.open('some url')
new_window.onBeforeUnload = function(){ my code}
我怎样才能做到这一点?
虽然接受的答案对于同源是正确的,但我找到了跨源弹出窗口的解决方案:
var win = window.open('http://www.google.com');
var timer = setInterval(function() {
if(win.closed) {
clearInterval(timer);
alert('closed');
}
}, 1000);
资料来源:atashbahar.com
对于那些考虑使用它的人。
甚至 Facebook 也在他们的Javascript SDK 中使用这个“hack” 。
您可以通过查看他们的代码来验证这一点。只需.closed
在https://connect.facebook.net/en_US/sdk.js 中搜索即可。
只要弹出窗口 url 与父页面在同一个域中,并且您将事件更改为全部小写,您的示例就会起作用:
var new_window = window.open('some url')
new_window.onbeforeunload = function(){ /* my code */ }
事件名称是onbeforeunload
而不是onBeforeUnload
。JS 区分大小写。
onbeforeunload
必须在加载弹出窗口后添加事件。例如,您可以将它添加到加载事件的末尾,如下所示;
const new_window = window.open('some url')
new_window.onload = function(){
/* my code */
this.onbeforeunload = function(){ /* my code */ }
}