【问题标题】:Is it possible to overwrite window.location function with a custom function?是否可以用自定义函数覆盖 window.location 函数?
【发布时间】:2011-09-22 15:29:15
【问题描述】:

是否可以禁用,甚至更好地替换为自定义函数window.location

这个问题相关:Disable a built-in function in javascript (alert)

虽然它适用于 window.alert,但不适用于 window.location

我们希望能够找到一种方法来替换或禁用(替换将是理想的,因此我们可以 AJAX 记录)window.location... 肮脏的广告商有时会使用此方法将人们从我们的网站上抢走属性。

有什么想法吗?

即使是只在少数特定浏览器上运行的东西也会很好,因为一旦被捕获(通过 AJAX 日志记录)我们可以相当快地采取行动。

【问题讨论】:

  • window.location 不是函数。
  • 来自 chrome 控制台:console.log(typeof window.location);我想对象又近了一步。知道我想要完成的事情是否可行吗?
  • @anonymous-one:不——它是一个属性,所以你不能用你自己的代码替换它(没有代码可以替换)。
  • 您是说广告商正在更改您网页中的 window.location 属性,从而将用户从您的网站引导到另一个网站?
  • 在过去的 1.5 年里发生了两次(据我们所知)。我们 iframe 我们所有的广告空间,但他们能够通过 parent.window.location=....;

标签: javascript function replace built-in


【解决方案1】:

试试这个

var _window = {
       location: "myLocation"
};

(function (window) {
   console.log(window.location);
}(_window));

【讨论】:

  • 如果您纯粹是为网站构建 iframe,这可能无济于事,但它对我的情况非常有用。谢谢!
  • 它创建一个变量,当传递给函数时,该变量在本地模拟window.location 属性。但它不会影响全局 window.location 属性
【解决方案2】:

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

总结

返回一个 Location 对象,它 包含有关 URL 的信息 该文件并提供了方法 更改该网址。 你也可以指定 到此属性以加载另一个 URL

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

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

【讨论】:

  • 经过努力,我们已经意识到window.location的行为是无法改变的。
  • @anonymous-one - 太糟糕了。我从来没有见过劫持页面的广告网络,所以我希望你能想出办法。您能否将在您的网站上展示的广告列入白名单?
  • 在某些浏览器中可以使用__defineGetter__ 覆盖window.location,尽管我不推荐这样做。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 至少在 chrome 和 firefox 中这是不可能的,因为 window.location 是不可配置的
  • 关于@dansomething 评论,这里有一个解决方案:gist.github.com/zacharytamas/082e538784ebe07e40f9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多