スクリプトエラー解析

このカテゴリは個人的なメモです。

ブラウザ判定コード

ブラウザの判定コードに失敗しているサイトがあり、navigator.language.split()の呼び出して navigator.language が undefined のためにエラーになっている。
ソースコードを見ると、本来 Netscape 用のコードに飛んできているためにエラーが起きている。navigator.language は Netscape 系のプロパティらしい。


IEならば、navigator.browserLanguage もしくは navigator.userLanguage に何らかの値が入っていなければならない(これらはIE固有)。
navigator オブジェクトの初期値で browserLanguage='ja'、userLanguage='ja' を追加。

しぃペインター

document.size.app にアクセスできないエラーが出ている。size は FORM で、app はフォーム内のコントロール名。document から直接フォームの名称でフォーム参照できたかな・・・? 仕様は見つからなかったが、とりあえず IE ではエラーにならないようなのでフォームのみ document オブジェクトの直下に追加することにする。


フォームオブジェクトからのフォームコントロールの名前参照はW3Cで規定済みなので実装済みで問題なし、のはず。

viewオブジェクト

「parent.view.location.href="./menu.html";」という使い方があるらしいが、viewオブジェクトが何なのか分からない・・・


locationプロパティを持つのは windows か document だと思うので、どちらかと等価なんだろうか?

外部参照スクリプト文字コード (23:20追記)

外部参照スクリプトについては文字コードのチェックをしていなかったため、UTF-8の外部スクリプトを読み込むサイトでエラーが起きていた。


このサイトでは、外部スクリプトUTF-8で、かつUTF-8のBOM(EF BB BF)が先頭についていたために、「SyntaxError: illegal character」になってしまっていた。
クレジットを見ると娘娘飯店しるきぃうぇぶさんのところで配布されている「あれこれポップアップ」というスクリプトのようだ。


外部参照スクリプトの読込み時にもコード変換を通すように修正して解決。
あとついでに分かったこととして、MultiByteToWideChar()はBOMを期待通りに処理してはくれないようだ。MultiByteToWideChar()に渡す前にBOMを削除しておかないと期待通りの出力にはならなかった。