是否可以使用自定义函数覆盖window.location函数?

ano*_*one 11 javascript replace function built-in

是否可以禁用甚至更好地替换自定义功能window.location

这个问题是相关的:在javascript中禁用内置函数(alert)

虽然它工作得很好window.alert,但这不起作用window.location.

我们希望能够找到替换或禁用的方法(替换将是理想的,所以我们可以AJAX日志)window.location...肮脏的广告客户有时使用它来窃取人们远离我们的网络属性.

有任何想法吗?

即使只能在少数特定浏览器上运行的东西也可以正常运行(通过AJAX日志记录),我们可以相当快地采取行动.

小智 7

试试这个

var _window = {
       location: "myLocation"
};

(function (window) {
   console.log(window.location);
}(_window));
Run Code Online (Sandbox Code Playgroud)

  • 如果你纯粹是在某个网站上,这可能无济于事,但这对我的情况非常有用.谢谢! (3认同)
  • 它创建了一个变量,当传递给函数时,它会在本地模拟 `window.location` 属性。虽然它不影响全局`window.location` 属性 (2认同)

Jar*_*ish 6

我不相信你可以重新分配window.location.来自MDN:

摘要

返回Location对象,其中包含有关文档URL的信息,并提供更改该URL的方法.您还可以指定此属性以加载其他URL.

https://developer.mozilla.org/en/DOM/window.location

因为它需要像属性一样的值,你如何将对象/函数"重新分配"为另一个值?由于财产行为,我不认为这是可能的.

  • 经过多方努力,我们逐渐意识到window.location的行为无法改变. (3认同)
  • 在某些浏览器中可以使用`__defineGetter__`来覆盖window.location,尽管我不推荐它.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ (2认同)
  • 关于@dansomething评论,这里有一个解决方案:https://gist.github.com/zacharytamas/082e538784ebe07e40f9 (2认同)