在什么情况下 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)
不幸的是,错误并没有始终如一地重现,但流程是:
通过 JavaScript 打开新的 window。
在新的 window 中,调用这行代码。
基于谷歌搜索、内部测试和像 this 这样的答案,似乎 window.location.search
至少应该是一个空字符串,但绝不是未定义的。如果 window
或 location
未定义,则预计错误会以不同方式出现。
在什么情况下可以 window.location.search
未定义?
所有浏览器都应该(并且所有通常怀疑的人都这样做)为此 属性 实现 w3c guidelines。这些州:
The search attribute's getter must run these steps:
- 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.
- If this Location object's url's query is either null or the empty
string, return the empty string.
- Return "?", followed by this Location object's url's query.
所以这个 属性 应该抛出一个 SecurityError
或者是一个空字符串。如果你没有看到这个,那么它是一个有错误的浏览器或者没有正确实现这个规范的浏览器(可能是网络爬虫)。
无论哪种方式,都可以让您遵守 w3c 指南。 我会说这不是你的问题。您的工作是编写符合 w3c 规范的代码,遵守这些规范是浏览器的工作。如果他们不这样做,所有的赌注都会被取消。任何东西都可能坏掉。
你说:
it happens on chrome
但我怀疑这个的有效性。实际识别浏览器非常困难,欺骗浏览器也很简单 user-agent
。
我们在日志中不一致地看到此错误:
Cannot read property 'substring' of undefined
它出现在这行代码中:var sPageURL = window.location.search.substring(1)
不幸的是,错误并没有始终如一地重现,但流程是:
通过 JavaScript 打开新的 window。
在新的 window 中,调用这行代码。
基于谷歌搜索、内部测试和像 this 这样的答案,似乎 window.location.search
至少应该是一个空字符串,但绝不是未定义的。如果 window
或 location
未定义,则预计错误会以不同方式出现。
在什么情况下可以 window.location.search
未定义?
所有浏览器都应该(并且所有通常怀疑的人都这样做)为此 属性 实现 w3c guidelines。这些州:
The search attribute's getter must run these steps:
- 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.
- If this Location object's url's query is either null or the empty string, return the empty string.
- Return "?", followed by this Location object's url's query.
所以这个 属性 应该抛出一个 SecurityError
或者是一个空字符串。如果你没有看到这个,那么它是一个有错误的浏览器或者没有正确实现这个规范的浏览器(可能是网络爬虫)。
无论哪种方式,都可以让您遵守 w3c 指南。 我会说这不是你的问题。您的工作是编写符合 w3c 规范的代码,遵守这些规范是浏览器的工作。如果他们不这样做,所有的赌注都会被取消。任何东西都可能坏掉。
你说:
it happens on chrome
但我怀疑这个的有效性。实际识别浏览器非常困难,欺骗浏览器也很简单 user-agent
。