Safariブラウザでの、window.locationの挙動

後輩がはまっていたので、調査していると、Safari・MacIEに関しては、
独特の挙動を持っていました。


Safariで、window.locationが動かないと言われたので、
なんで動かへんねんと思いつつ調査。


確かに、動かないわけなのですが、なんで動かないのかのわからない状態。
色々と調査をしていると、下記のサイトにたどり着きました。
http://snook.ca/archives/javascript/windowlocation/

<script type="text/javascript">
function test3(){
 window.location = 'http://snook.ca/';
}
</script>
<p><a href="#" onclick="window.location = 'http://snook.ca'"> test 1</a></p>
<p><a href="#" onclick="window.location = 'http://snook.ca'; return false;">test 2</a></p>
<p><a href="#" onclick="test3();">test 3</a></p>
<p><a href="#" onclick="test3();return false;">test 4</a></p>
<p><a href="javascript:window.location = 'http://snook.ca';">test 5</a></p>

上記の中で、Safariならびに、MacIE5.2で正常に動くのは、どれでしょうというものでした。
正解は、2と4と5が動いて、1と3は動きません。


なぜかと言いますと、新しいURLとして、window.locationがセットされるのですが、
onclickイベントのあとで、アンカータグのhrefがセットされるため、新しいURLは、「#」となってしまいます。
アンカータグのhrefがセットされるのを回避するために、return false;が必要となります。


こうやって調べて、ブログに載せるってやっぱり重要ですね。
日本語の情報がなかったので、こうやって公開しておきます。