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-pathFirefox はハッシュを正しく配置できません。スペースはエンコードされていないように見えますが、他のブラウザーでは として正しくエンコードされてい%20ます。

奇妙な癖:コードをデバッグすると、文字列がエンコードされたスペースと共にリストされます。

行われた調査: Firefox でハッシュを正しく読み取るための解決策がたくさん見つかりました。何らかの形で、これは私のコードでうまく機能しています。

質問: window.location.hash に入力した文字列内のスペースを Firefox が URL デコードしないようにするにはどうすればよいですか?

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 に答える