昨日はこのエラーで優に 1 時間は時間を浪費してしまった。
ドキュメントの URL によって処理を変える JavaScript コードを書こうと、urlStr = document.location; で得た値 urlStr に対して pos = urlStr.indexOf("hoge"); と indexOf メソッドを使うとこのエラーが出る。 しかし、原因が全くわからない。 document.location で URL を取れることは事前に alert(document.location); で確認済みだったので、最初はブラウザのバグかと思ったのだが、どのブラウザでも同じエラーになるので、どうやらブラウザのバグではなさそうだ。
さんざん調べてやっと分かったのが、document.location は String ではなく Location オブジェクトを返すということ。 一方、indexOf は String のメソッドで Location オブジェクトのメソッドとしては存在しないから、この記事のタイトルにあるようなエラーになってしまうのだ。
正しくは urlStr = document.location.href; とするべきだった。 Location オブジェクトは href プロパティを持っていて、これは string なので安心して indexOf を使える。 そもそも document.location は String を返すものと思い込んでいたのが間違いのもとだった。 そのせいで原因調査に 1 時間もかかってしまったのだ。 思い込みってやつは恐い。
しかし我ながらこのブログって .... 唐突にアロマテラピーのネタが二つも続いたと思ったら、今度は PC・Internet 関係の記事が二つ。 統一性なさすぎ。 ごっちゃ煮もいいとこで、自分でもなにがなんだかワケわからん(^^;)
クロスブラウザ JavaScript を書くために、各種ブラウザの navigator プロパティなどを調べてみました。 JavaScript コードを書かない方は、読んでもまったく役にも立たなきゃ面白くもありません(^^;)
Since 11th March, 2006.
本ブログのエントリーに対するコメントやトラックバックは予告なく削除されることがあります。 あらかじめご了承下さい。