我做:
// Can be edited
window.onbeforeunload = function(){
console.log("A")
}
然后:
// Cannot be edited (for example, this code appears in 3rd party library)
window.onbeforeunload = function(){
console.log("B")
}
然后我刷新页面并看到" B"在控制台日志中。预期。但我想防止第二次绑定实际发生。基本上,我想锁定一个事件并防止它被永远覆盖(在页面生命期间)。结果,我想看到" A"在控制台登录页面刷新。
注1 :我无法使用console.log(" B")编辑部分代码,因为它可能出现在第三方JS库中。
注2 :需要Crossbrowser解决方案。
答案 0 :(得分:4)
这似乎有效:
window.onbeforeunload = function() { return "HI!"; };
Object.defineProperty(window, 'onbeforeunload', {
writable: false
});
window.onbeforeunload = function() { return "BYE!"; };
答案 1 :(得分:3)
无法密封像您一样的window
属性。
但是,如果您将代码更改为使用window.addEventListener()
,则可以阻止事件传播到其他事件侦听器:
window.addEventListener('beforeunload', function (e) {
e.stopImmediatePropagation();
console.log('A')
});
window.addEventListener('beforeunload', function (e) {
e.stopImmediatePropagation();
console.log('B')
});
A
将在unload
上打印到控制台。