Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于禁用window.onbeforeunload的用户脚本_Javascript_Userscripts - Fatal编程技术网

Javascript 用于禁用window.onbeforeunload的用户脚本

Javascript 用于禁用window.onbeforeunload的用户脚本,javascript,userscripts,Javascript,Userscripts,我正在尝试创建一个用户脚本,该脚本在所有页面上禁用window.onbeforeunload。我已尝试在文档开始处插入以下脚本: Object.defineProperty(window, 'onbeforeunload', { 'value': null }); 这样,window.onbeforeunload不能由页面上的任何其他脚本设置。这可以正常工作,除非页面包含另一个脚本,该脚本尝试在启用严格模式的情况下设置window.onbeforeunload,例如: 'use str

我正在尝试创建一个用户脚本,该脚本在所有页面上禁用window.onbeforeunload。我已尝试在文档开始处插入以下脚本:

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处理程序,同时仍然保持它的外观。密切相关: