9

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

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

window.location = "unwanted url";
4

3 回答 3

6

我不认为这是可能的。

  • 您不能覆盖属性或方法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什么也不做

我没主意了...

于 2013-08-17T04:38:04.623 回答
5

您不能更改window.location原型,因为这是一个“原生属性”,window并且它是不可配置的。

在 Firefox (Greasemonkey) 上,如果您尝试覆盖它,您将收到如下错误:

TypeError:无法重新定义不可配置的属性“位置”

错误:阴影本机属性的权限被拒绝

...取决于您如何尝试。其他浏览器给出类似的错误。


要阻止这种重定位,您需要根据具体情况干预页面的 javascript。

有关适用于 Firefox 的一般方法,请参阅“停止执行 Javascript 函数(客户端)或对其进行调整” 。虽然它可能会容易得多,具体取决于您的目标页面的确切代码。

于 2013-08-17T06:25:37.797 回答
-3

为时已晚,但您可以简单地做到这一点,而无需删除整个脚本Object.prototype.watch

window.watch('location', function( attr ,_ , target){
    if(target.indexOf('unwanted url') !== -1)return '#';
});
于 2015-05-11T18:58:00.937 回答