4

目标:data正确地将属性中的字符串放入window.location.hash.

编码:

map = {path: $(this).attr('data-path'), rev: $(this).attr('data-rev')};
window.location.hash = getMapParams(map);

function getMapParams(map) {
  s="";
  for(key in map) {
    value=eval("map."+key);
    if (s.length > 0) {
      s+="&";
    }
    s+=encodeURIComponent(key)+"="+encodeURIComponent(value);
  }
  return s;
}

问题:一旦data-path属性包含空格,Firefox 就无法正确放置散列。该空间将显示为未编码,而在其他浏览器中它被正确编码为%20.

奇怪的怪癖:如果我调试代码,则字符串编码空间一起列出。

完成的研究:我找到了很多在 Firefox 中正确读取哈希的解决方案。以一种或另一种方式,这适用于我的代码。

问题:如何阻止 Firefox 对我放入 window.location.hash 的字符串中的空格进行 urldecoding

4

1 回答 1

5

我通常会尽量避免window.location.hash,因为它在浏览器中并不统一。

因此,而不是做以下

window.location.hash = "some hash value";

我会做

window.location.href = window.location.href.split("#")[0] + "#" + encodeURIComponent("some hash value");

此外,尽管 Firefox 在地址栏中显示解码后的哈希(即 ' ' 而不是 %20),但如果您尝试复制地址,它实际上是经过编码的。因此,显示的内容不是 URI 中的内容。

顺便说一句,我总是使用以下代码访问哈希

var hash_val = window.location.href.split("#")[1] || "";
于 2012-03-27T14:07:48.617 回答