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