ヤバイですよ、奥さん。
Safari2は1つの問題について調べている間に、ぽろぽろと他の問題に出くわします。
location.hashより取得した値を再びlocation.hashへ代入すると余計な"%23"が追加される場合があります。
検証プログラム §
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>test</title>
</head>
<body>
<input type="button" onclick="location.hash = location.hash + 'A';"
value="hashにAを追加"></input>
</body>
</html>
これを表示させ、ボタンをゆっくりと繰り返し押してみます。(素早く押すと受け付けられないことがあるらしい)
IE, Firefox, Operaでは、これに応じて、アドレス欄の表記が以下のように変化します。
http://……
http://……#A
http://……#AA
http://……#AAA
しかし、Safari2(412.2)では以下のようになりました。
http://……
http://……#A
http://……#%23AA
http://……#%23%23AAA
どうも、location.hashから取得した値をそのまま入れると、先頭の#が一般の文字と認識され、%23にエスケープされて#の後ろに追加されてしまうようです。
回避方法 §
おそらく、location.hashに代入する場合には、常に先頭の#を取り除くように組めばどのWebブラウザでも上手く行くような気がします。(未検証)
感想 §
疲れた……。1つの問題について調べている間に別の問題が見付かり、それを調べている間に更に別の問題が見付かるSafariっていったい……。