gpt4 book ai didi

javascript - 禁用 window.onbeforeunload 的用户脚本

转载 作者:行者123 更新时间:2023-11-30 11:10:34 25 4
gpt4 key购买 nike

我正在尝试创建一个禁用所有页面上的 window.onbeforeunload 的用户脚本。我试过在 document_start 插入以下脚本:

Object.defineProperty(window, 'onbeforeunload', {
'value': null
});

这样 window.onbeforeunload 不能被页面上的任何其他脚本设置。这工作正常,除非页面包含另一个脚本试图设置 window.onbeforeunload 并启用严格模式,例如:

'use strict';
window.onbeforeunload = function(){
return true;
};
//Script execution stops after this
console.log(window.onbeforeunload);

这会导致抛出异常并会完全停止脚本执行,这似乎有点苛刻。

有什么方法可以防止 window.onbeforeunload 被设置,但不能使页面上的其他脚本在启用严格模式时完全停止执行?

谢谢!

最佳答案

改为将其设为 setter 属性,然后丢弃该值。

Object.defineProperty(window, 'onbeforeunload', {
'set': function() {}
});

(function() {
'use strict';
window.onbeforeunload = function(){
return true;
};
console.log(window.onbeforeunload);
})();

然后当某些东西试图将它设置为严格模式时,它只会被丢弃而不是抛出错误。

如果你想让它更加防弹,你可以覆盖 getter 和 setter,以返回一个你存储在变量中的函数。

var beforeUnload = null;
Object.defineProperty(window, 'onbeforeunload', {
get: function () { return beforeUnload; },
set: function (value) { beforeUnload = value; }
});

(function() {
'use strict';
window.onbeforeunload = function(){
return true;
};
console.log(window.onbeforeunload);
console.log(typeof window.onbeforeunload);
})();

关于javascript - 禁用 window.onbeforeunload 的用户脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53900982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com