Javascript 用于禁用window.onbeforeunload的用户脚本
我正在尝试创建一个用户脚本,该脚本在所有页面上禁用window.onbeforeunload。我已尝试在文档开始处插入以下脚本:Javascript 用于禁用window.onbeforeunload的用户脚本,javascript,userscripts,Javascript,Userscripts,我正在尝试创建一个用户脚本,该脚本在所有页面上禁用window.onbeforeunload。我已尝试在文档开始处插入以下脚本: Object.defineProperty(window, 'onbeforeunload', { 'value': null }); 这样,window.onbeforeunload不能由页面上的任何其他脚本设置。这可以正常工作,除非页面包含另一个脚本,该脚本尝试在启用严格模式的情况下设置window.onbeforeunload,例如: 'use str
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(窗口“onbeforeunload”{
“set”:函数(){}
});
(功能(){
"严格使用",;
window.onbeforeunload=函数(){
返回true;
};
console.log(window.onbeforeunload);
})();代码>您可以更改set函数,使其始终为null
Object.defineProperty(window, 'onbeforeunload', {
set: v => {
return null;
}
});
好主意,谢谢!但是我不明白第二部分。现在set函数只是将其设置为给定的值?@J.Doe在第二个示例中,自定义setter获取该值并将其存储在变量中,该变量可以由getter函数返回。基本上,它取代了默认的getter和setter,使函数永远不会真正注册为beforeunload处理程序,同时仍然保持它的外观。密切相关: