更改window.location原型以禁用某些重定向?

时间:2013-08-16 23:20:22

标签: javascript prototype greasemonkey window.location

我正在尝试使用Greasemonkey在文档的开头选择性地禁用window.location

我不想完全禁用javascript,只是禁用一些使用javascript完成的重定向。它们看起来像这样:

window.location = "unwanted url";

3 个答案:

答案 0 :(得分:4)

我不认为这是可能的。

  • 您无法覆盖window.location上的属性或方法(无声地失败)
  • 您无法使用location.__proto__ = Something.prototype
  • 重新定义原型
  • location.constructor.prototype基本上是Object.prototype
  • 构造函数实际上没有做任何事情(比如创建属性或方法)
  • __definesetter__无声地失败
  • Object.defineProperty会出现错误,例如TypeError: Cannot redefine property: href
  • delete window.locationdelete 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 '#';
});