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;が必要となります。
こうやって調べて、ブログに載せるってやっぱり重要ですね。
日本語の情報がなかったので、こうやって公開しておきます。