一种可能的答案是跨浏览器问题。浏览器处理 unicode 的方式不一致,尤其是 URL 片段。
例如,通过链接
<a id="foo" href="%D1%83%D0%BE%D0%BC%D0%B1%D0%BB%D1%8B">Уомблы</a>
Browser | Hover | Location bar | href* | path*
----------------------------------------------------------
Chrome 19 | Unicode | Unicode | Percent | Percent
Firefox 13 | Unicode | Unicode | Percent | Percent
IE 9 | Percent | Percent | Percent | Percent
但有一个片段:
<a id="foo" href="#%D1%83%D0%BE%D0%BC%D0%B1%D0%BB%D1%8B">Уомблы</a>
Browser | Hover | Location bar | href* | hash*
----------------------------------------------------------
Chrome 19 | Percent | Percent | Percent | Percent
Firefox 13 | Unicode | Unicode | Percent | Unicode
IE 9 | Percent | Percent | Percent | Percent
链接=javascript:document.getElementById('foo').href
路径=javascript:location.pathname
在以下链接之后
哈希=javascript:location.hash
在以下链接之后
因此,当您请求哈希时,Firefox 会将片段的百分比编码解码为 unicode,导致它与 id/name 属性的值不匹配。注意,这只是 JavaScript 中的一个问题;以下链接工作正常。