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

Change window.location prototype to disable certain redirects?

本文关键字:重定向 window location 原型 更改      更新时间:2023-09-26

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

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

window.location = "unwanted url";

我认为这是不可能的。

  • 不能覆盖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什么都不做

我没主意了。。。

您不能更改window.location原型,因为这是window的"本机属性",并且不可配置。

在Firefox(Greasemonkey)上,如果你试图覆盖它,那么你会得到这样的错误:

TypeError:无法重新定义不可配置的属性"location"

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

这取决于你尝试的方式。其他浏览器也会出现类似的错误。


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

请参阅"停止执行Javascript函数(客户端)或对其进行调整",了解在Firefox中工作的一般方法。尽管这可能要容易得多,但这取决于目标页面的确切代码。

太晚了,但您可以简单地执行此操作,而无需使用Object.prototype.watch:删除整个脚本

window.watch('location', function( attr ,_ , target){
    if(target.indexOf('unwanted url') !== -1)return '#';
});