在什么情况下 window.location.search 是未定义的?

Under what conditions would window.location.search be undefined?

我们在日志中不一致地看到此错误:

Cannot read property 'substring' of undefined

它出现在这行代码中:var sPageURL = window.location.search.substring(1)

不幸的是,错误并没有始终如一地重现,但流程是:

  1. 通过 JavaScript 打开新的 window。

  2. 在新的 window 中,调用这行代码。

基于谷歌搜索、内部测试和像 this 这样的答案,似乎 window.location.search 至少应该是一个空字符串,但绝不是未定义的。如果 windowlocation 未定义,则预计错误会以不同方式出现。

在什么情况下可以 window.location.search 未定义?

所有浏览器都应该(并且所有通常怀疑的人都这样做)为此 属性 实现 w3c guidelines。这些州:

The search attribute's getter must run these steps:

  1. If this Location object's relevant Document is non-null and its origin is not same origin-domain with the entry settings object's origin, then throw a "SecurityError" DOMException.
  2. If this Location object's url's query is either null or the empty string, return the empty string.
  3. Return "?", followed by this Location object's url's query.

所以这个 属性 应该抛出一个 SecurityError 或者是一个空字符串。如果你没有看到这个,那么它是一个有错误的浏览器或者没有正确实现这个规范的浏览器(可能是网络爬虫)。

无论哪种方式,都可以让您遵守 w3c 指南。 我会说这不是你的问题。您的工作是编写符合 w3c 规范的代码,遵守这些规范是浏览器的工作。如果他们不这样做,所有的赌注都会被取消。任何东西都可能坏掉。


你说:

it happens on chrome

但我怀疑这个的有效性。实际识别浏览器非常困难,欺骗浏览器也很简单 user-agent