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

Javascript 在什么情况下,window.location.search将是未定义的?,javascript,window.location,Javascript,Window.location,我们在日志中不一致地看到此错误: 无法读取未定义的属性“substring” 它出现在这行代码中:var sPageURL=window.location.search.substring(1) 不幸的是,错误并未持续再现,但流程是: 通过JavaScript打开新窗口 在新窗口中,调用这行代码 基于谷歌搜索、内部测试和类似的回答,它看起来像是window.location.search应该是一个空字符串,但决不能是未定义的。如果未定义窗口或位置,则错误的显示方式可能会有所不同 在什么情况下

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

无法读取未定义的属性“substring”

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

不幸的是,错误并未持续再现,但流程是:

  • 通过JavaScript打开新窗口

  • 在新窗口中,调用这行代码

  • 基于谷歌搜索、内部测试和类似的回答,它看起来像是
    window.location.search
    应该是一个空字符串,但决不能是未定义的。如果未定义
    窗口
    位置
    ,则错误的显示方式可能会有所不同

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

    所有浏览器(以及所有通常怀疑的浏览器)都应该实现此属性的。这些国家:

    搜索属性的getter必须运行以下步骤:

  • 如果此位置对象的相关文档为非空且其 原点与条目设置对象的原点域不同 然后抛出一个“SecurityError”DOMException
  • 如果此位置对象的url查询为null或为空 字符串,返回空字符串
  • 返回“”,后跟此位置对象的url查询
  • 所以这个属性应该抛出一个
    SecurityError
    ,或者是一个空字符串。如果您没有看到这一点,那么这是一个有缺陷的浏览器,或者是一个没有正确实现此规范的浏览器(可能是一个网络爬虫)

    无论哪种方式,您都可以遵守w3c指南我想说这不是你的问题。您的工作是编写符合w3c规范的代码,而浏览器的工作就是遵守这些规范。如果他们不这样做,所有的赌注都输光了。很多东西都可能破裂


    你确实声明:

    它发生在铬上

    但我怀疑这是否正确。实际上很难识别浏览器,欺骗浏览器
    用户代理
    也很简单。
    

    您是否检查了用户的浏览器?它可能是API不正确的浏览器implemented@Axnyff谢谢你的回复。这种情况发生在chrome上,但不幸的是,这种情况并非始终如一。例如,你的网站可能被某个使用jsdom的机器人刮走了。或者像PhantomJS这样的其他浏览器。基本上,任何不实现
    window.location.search
    的浏览器/库。我认为
    jsdom
    是最有可能的一个。它发生在chrome上,你怎么知道的?这听起来像是meRight的机器人,你无法通过报告的用户代理来辨别真正的浏览器。你必须测试它的功能和指纹,即使这样你也会被愚弄:)