【发布时间】:2026-02-11 01:30:01
【问题描述】:
我有一个小应用程序可以打开一个新的弹出窗口。我将窗口存储在一个变量中:
popup = window.open("sites/display.html", "_blank");
之后我添加了一个 beforeunload 事件监听器:
$(popup).on('beforeunload', function(){
// Do something
});
然后我稍后用一个按钮重新加载窗口:
popup.location = popup.location;
之后,如果我关闭窗口,则不会再触发 Event beforeunload。我认为这与重新加载有关,因为如果我不重新加载页面,一切正常。
如何解决这个问题,以便在每次窗口关闭时触发事件?
我使用的确切代码:
function startClock(allowRestart) {
saveSettings(allowRestart);
if ($("#separated-display").is(":checked")) {
// Separated mode activated
if (popup == undefined) {
openPopup();
} else {
if (popup.closed) {
openPopup();
}else{
popup.location.reload();
}
}
} else {
// Separated mode deactivated
if (popup != null && popup.closed == false) {
$(popup).unbind();
popup.close();
}
window.location = "sites/display.html"; // Open the clock in same window
}
}
function openPopup(){
// Open new popup window
popup = window.open("sites/display.html", "_blank");
// TO-DO: Fix event not fired after 1. window reload 2. window close
popup.addEventListener('beforeunload', function(){
console.log("unload");
});
}
【问题讨论】:
-
查看控制台。我确定您会收到类似“来自...的访问被拒绝”的错误
-
实际上一切正常。控制台中没有错误。它是我的一个 html 文件的弹出窗口,因此符合同源策略。
-
你是打开同域的窗口还是跨域?
标签: javascript jquery event-handling window