次のコードを検討してください。
hashString = window.location.hash.substring(1);
alert('Hash String = '+hashString);
次のハッシュで実行すると:
#car=町%20%26%20国
ChromeとSafariでの結果は次のようになります。
車=町%20%26%20国
ただし、Firefox (Mac および PC) では次のようになります。
car=タウン&カントリー
同じコードを使用してクエリとハッシュ パラメータを解析するためです。
function parseParams(paramString) {
var params = {};
var e,
a = /\+/g, // Regex for replacing addition symbol with a space
r = /([^&;=]+)=?([^&;]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = paramString;
while (e = r.exec(q))
params[d(e[1])] = d(e[2]);
return params;
}
ここでの Firefox の特異性はそれを打ち破ります: car パラメータは、国ではなく "Town" になります。
ブラウザー間でハッシュパラメーターを解析する安全な方法、または Firefox がそれらを読み取る方法を修正する方法はありますか?
注:この問題は、Firefox の HASH パラメータの解析に限定されています。クエリ文字列を使用して同じテストを実行すると、次のようになります。
queryString = window.location.search.substring(1);
alert('Query String = '+queryString);
すべてのブラウザで次のように表示されます。
車=町%20%26%20国