我正在尝试使用Greasemonkey在文档的开头选择性地禁用window.location
。
我不想完全禁用javascript,只是禁用一些使用javascript完成的重定向。它们看起来像这样:
window.location = "unwanted url";
答案 0 :(得分:4)
我不认为这是可能的。
window.location
上的属性或方法(无声地失败)location.__proto__ = Something.prototype
location.constructor.prototype
基本上是Object.prototype
__definesetter__
无声地失败Object.defineProperty
会出现错误,例如TypeError: Cannot redefine property: href
delete window.location
和delete window.location.href
不做任何事情我没有想法......
答案 1 :(得分:4)
您无法更改window.location
原型,因为这是window
的“原生属性”,而且是not configurable。
在Firefox(Greasemonkey)上,如果你试图覆盖它,那么你会得到如下错误:
TypeError:无法重新定义不可配置的属性“location”
和
错误:拒绝权限以隐藏本机属性
......取决于你的尝试方式。其他浏览器会出现类似的错误。
要阻止此类重定位,您需要根据具体情况干扰页面的javascript。
有关在Firefox中有效的一般方法,请参阅"Stop execution of Javascript function (client side) or tweak it"。虽然它可能更容易,具体取决于您的目标网页的确切代码。
答案 2 :(得分:-1)
为时已晚,但您可以在不使用Object.prototype.watch
删除整个脚本的情况下执行此操作:
window.watch('location', function( attr ,_ , target){
if(target.indexOf('unwanted url') !== -1)return '#';
});