Firefox37で発覚したロケーションバーの全角問題
ChromeやIEでは問題なかったし、Firefox34*1でも問題なかったのだけど。
たとえばロケーションバーに
http://tohokuaiki.hateblo.jp/#ここに全角スラッシュ/を入れます。
とした場合、FirebugやChromeのコンソールから location.hashとすると
> location.hash
"#ここに全角スラッシュ/を入れます。"
Firefox37
location.hash
"#ここに全角スラッシュ%uFF0Fを入れます%u3002"
となってしまう。Unicodeとしてエンティティ化されてしまっている。
これをこのまま decodeURIComponentに突っ込むとmalformed uriとしてエラー発生してしまう。
URLは正規化されてなかったりする。
詳しい説明は、下記のページに譲る。Firefoxだけデコードしない値で返すようだけどどうも微妙っぽい感じ。hail2u.net
そこで、URLUtilsというJavaScriptライブラリを使う。これは、URL StandardをJavaScriptで実装したものになる。
gist.github.com
使い方
var urlutils = new URLUtils(location); consoloe.log(urlutils.hash);
これでどのブラウザでも一律してURLエンコードされていない値で取得できる。