用户脚本禁用window.onbeforeunload

时间:2018-12-23 03:23:45

标签: javascript userscripts

我正在尝试创建一个在所有页面上禁用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,但不能在启用严格模式时阻止页面上的其他脚本完全执行?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

# =====================
# Oracle database setup
# =====================

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=XE

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

如果要使其具有防子弹功能,可以覆盖getter和setter,以返回存储在变量中的函数。

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

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

答案 1 :(得分:0)

您可以更改set函数,使其始终为空。

Object.defineProperty(window, 'onbeforeunload', {
  set: v => {
    return null;
  }
});