我需要在弹出窗口(使用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}
我该如何实现?
Answers:
只要弹出窗口的url与父页面位于同一个域中,您的示例就会起作用,并且您将事件更改为小写:
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中搜索。
var win = window.open('https://www.google.com/')
当用户允许弹出窗口时,win
变量将包含预期的对象。当然,您必须通过用户触发的事件来调用它。(例如onClick
在某件事上)
事件名称是onbeforeunload
和不是onBeforeUnload
。JS区分大小写。
如上所述,您需要在打开窗口后将onbeforeunload事件绑定到窗口。
参见其他线程中的示例:https : //stackoverflow.com/a/25989253/578275。