よくあるIEエラーを整理してください.
5130 ワード
数年来、IEはずっとJavaScriptの間違ったブラウザを調整しにくいです.IEによって与えられたエラーメッセージは、一般的に非常に短いです.また、文脈情報も少なく、少しもない場合もあります.以下のいくつかの小節はそれぞれIEで調整しにくいJavaScriptエラーを検討する.
操作終了
IE 8の前のバージョンでは、他のブラウザに対して最も困惑し、嫌で、最も調整しにくいエラーがあります.操作終了です.まだロードされていないページを修正すると、操作終了エラーが発生します.エラーが発生した場合、モードダイアログが表示されます.「操作が終了しました.確定(OK)ボタンをクリックすると、ページ全体をアンマウントして空白の画面が表示されます.この場合はデバッグが非常に困難です.以下の例では、操作終了エラーが発生します.
この問題を避けるためには、ターゲット要素のロードが完了したら操作を行うか、または他の操作方法を使うことができます.例えば、document.bodyのためにページ上に絶対的に配置されたカバー層を追加するのは、非常に一般的な操作です.通常、開発者は、apendChild方法を使用してこの要素を追加しますが、insertBefore()を使用します.方法も簡単です.したがって、前の例の1行のコードを修正すれば、動作終了エラーを回避できます.
変更方法に加えて、script要素を含む要素から直接にbodyのサブ要素として移動することもできます.例えば、
同じ場合、IE 8は、動作終了エラーをスローしないで、従来のJavaScriptエラーをスローし、次のようなエラーメッセージを含む.
HTML Pasing Error:unable to modify the parent Continer element before the child element is closed(KB 927917)
しかし、ブラウザから投げられたエラーは違っていますが、解決策は同じです.
無効な文字は文法によって、JavaScriptファイルには特定の文字しか含まれていない必要があります.JavaScriptファイルに無効な文字が存在する場合、IEは無効な文字(invalid character)を投げます.無効な文字とは、JavaScript文法では定義されていない文字です.例えば、マイナス記号に似ていますが、Unicode値8211で表される文字(u 2013)があります.を選択すると、従来のマイナス記号としては使用できません(ASCIIコードは45)JavaScript文法ではこの文字が定義されていません.この文字は通常Word文書に自動的に挿入されます.Word文書からテキストエディタにコピーされ、IEで実行されると、無効な文字エラーが発生する可能性があります.他のブラウザでは無効な文字に対する反応はIEと似ています.Firefoxは不正な文字を投げます.(iIlegal character)エラー、Safariは文法エラーが発生したことを報告します.OperaはReferenceErrer(引用ミス)が発生したことを報告します.無効な文字を未定義の識別子と解釈します.
メンバーIEの中のDOMオブジェクトはすべてCOMオブジェクトであり、元のJavaScriptオブジェクトではない形で実現されています.これはごみ収集に関する非常に奇妙な行動を引き起こすことがあります.
具体的には、対象が廃棄された後にそのオブジェクトに割り当てられた場合、メンバーのエラーが発生しませんでした.このエラーが発生したのは、COMオブジェクトに違いないです.このエラーが発生したのは、イベントオブジェクトを使用した場合が一番多いです.IEのイベントオブジェクトはwindowの属性です.このオブジェクトはイベント発生時に作成され、最後のイベントハンドラが実行されました.廃棄されました.一つのクローズドでイベントオブジェクトを使用したとしても、そのクローズドはすぐに実行されません.その後、これを呼び出してイベントのプロパティの割り当てを行うと、次の例のようにメンバーのエラーが見つからなくなります.
未知の運転時エラー
innerHTMLまたはouterHTMLを使用して以下のようにHTMLを指定すると、未知の運転が発生します.エラー(Unknown runtime error):一つはブロック要素を行の要素に挿入する場合、二つはテーブルの任意の部分にアクセスすることです.のいずれかの属性の場合、例えば、SPanタグにはdivなどのブロックレベルの要素が含まれていないため、以下のコードは未知の運転時エラーを引き起こします.
span.innerHTML=「div Hi/div」 //ここで、spanは、ブロックレベルの要素を不適切な位置に挿入する場合、他のブラウザはエラーを訂正して隠すことを試みるが、IEはこの点ではむしろ本当である.
構文エラー
通常、IE 1レポートで文法エラーが発生したら、すぐにエラーの原因を見つけることができます.この場合、コードの中にセミコロンが一つ足りないか、または括弧が前後して対応していない可能性があります.しかし、もう一つの原因は十分に明らかではない場合は特に注意しなければなりません.
外部のJavaScriptファイルを引用すると、最終的にJavaScriptコードに戻りませんでした.IEも文法エラーを投げます.例えば、script元素のSrc特性がHTMLファイルを指していると、文法エラーが発生します.文法エラーの位置を報告すると、台本の最初の行の文字のところにあると言われます.OperaとSafariも報告されます.エラーが発生しましたが、問題を引き起こす外部ファイルの情報を提供します.IEはこの情報を提供しませんので、外部JavaScriptファイルを繰り返し確認する必要があります.しかし、FirefoxはJavaScriptコンテンツとしてドキュメントに埋め込まれたJava Scriptファイルの解析エラーを無視します.
サーバー側のコンポーネントがJavaScriptを動的に生成する場合、このようなエラーが発生しやすいです.多くのサーバー側の言語は運行エラーが発生した時に、HTMLコードを出力に挿入します.このようなHTMLを含む出力はJavaScript文法に違反しやすいです.文法エラーを追及する時にトラブルが発生したら、もう一度参照の外部を確認してください.これらのファイルにサーバがエラーで挿入されたHTMLが含まれていないことを確認します.
システムが指定されたリソースシステムを見つけられませんでした.指定されたリソースが見つかりませんでした.このような説明は、おそらくIEが提供する最も価値のあるエラーメッセージである.JavaScriptを使用してあるリソースURLを要求するが、URLの長さがIEのURLに対して2083文字を超えてはいけないという制限を超えていると、このエラーが発生する.IEは、JavaScriptで使用するURLの長さを制限するだけでなく、ブラウザ自身で使用するURLの長さを制限することもできる.(他のブラウザのURLに対する制限はそんなに厳しくありません.IEはURLパスに対してもう一つの2048文字を超えてはいけません.以下のコードはエラーを引き起こします.
操作終了
IE 8の前のバージョンでは、他のブラウザに対して最も困惑し、嫌で、最も調整しにくいエラーがあります.操作終了です.まだロードされていないページを修正すると、操作終了エラーが発生します.エラーが発生した場合、モードダイアログが表示されます.「操作が終了しました.確定(OK)ボタンをクリックすると、ページ全体をアンマウントして空白の画面が表示されます.この場合はデバッグが非常に困難です.以下の例では、操作終了エラーが発生します.
document.body.appendChild(document.createElement("div"));
この例に存在する問題は、JavaScriptコードがページにロードされていないときにDcument.bodyを修正します.また、script元素はbody元素の直接的なサブ要素ではありません.正確には、scriptノードがある要素に含まれています.また、JavaScriptコードはapendChi 1 d、innerHTMLまたは他のDOM方法を使用してこの親要素を修正します.を選択すると、動作終了エラーが発生します.この問題を避けるためには、ターゲット要素のロードが完了したら操作を行うか、または他の操作方法を使うことができます.例えば、document.bodyのためにページ上に絶対的に配置されたカバー層を追加するのは、非常に一般的な操作です.通常、開発者は、apendChild方法を使用してこの要素を追加しますが、insertBefore()を使用します.方法も簡単です.したがって、前の例の1行のコードを修正すれば、動作終了エラーを回避できます.
document.body.lnsertBefore(document.createElement("div"), document.body.firstChild);
この例では、新しいdiv要素は、末尾ではなくDcument.bodyの先頭部分に追加されます.この動作を完了するために必要なすべての情報は、スクリプトの実行時に知られていますので、これはエラーを起こしません.変更方法に加えて、script要素を含む要素から直接にbodyのサブ要素として移動することもできます.例えば、
document.body.appendChild(document.createElement("div"));
今回も間違いはありません.脚本の修正は直接的な父要素であり、間接的な祖先要素ではないからです.同じ場合、IE 8は、動作終了エラーをスローしないで、従来のJavaScriptエラーをスローし、次のようなエラーメッセージを含む.
HTML Pasing Error:unable to modify the parent Continer element before the child element is closed(KB 927917)
しかし、ブラウザから投げられたエラーは違っていますが、解決策は同じです.
無効な文字は文法によって、JavaScriptファイルには特定の文字しか含まれていない必要があります.JavaScriptファイルに無効な文字が存在する場合、IEは無効な文字(invalid character)を投げます.無効な文字とは、JavaScript文法では定義されていない文字です.例えば、マイナス記号に似ていますが、Unicode値8211で表される文字(u 2013)があります.を選択すると、従来のマイナス記号としては使用できません(ASCIIコードは45)JavaScript文法ではこの文字が定義されていません.この文字は通常Word文書に自動的に挿入されます.Word文書からテキストエディタにコピーされ、IEで実行されると、無効な文字エラーが発生する可能性があります.他のブラウザでは無効な文字に対する反応はIEと似ています.Firefoxは不正な文字を投げます.(iIlegal character)エラー、Safariは文法エラーが発生したことを報告します.OperaはReferenceErrer(引用ミス)が発生したことを報告します.無効な文字を未定義の識別子と解釈します.
メンバーIEの中のDOMオブジェクトはすべてCOMオブジェクトであり、元のJavaScriptオブジェクトではない形で実現されています.これはごみ収集に関する非常に奇妙な行動を引き起こすことがあります.
具体的には、対象が廃棄された後にそのオブジェクトに割り当てられた場合、メンバーのエラーが発生しませんでした.このエラーが発生したのは、COMオブジェクトに違いないです.このエラーが発生したのは、イベントオブジェクトを使用した場合が一番多いです.IEのイベントオブジェクトはwindowの属性です.このオブジェクトはイベント発生時に作成され、最後のイベントハンドラが実行されました.廃棄されました.一つのクローズドでイベントオブジェクトを使用したとしても、そのクローズドはすぐに実行されません.その後、これを呼び出してイベントのプロパティの割り当てを行うと、次の例のようにメンバーのエラーが見つからなくなります.
document.onclick = function () {
var event = window.event;
setTimeout(function (){
event.returnValue = false; //
}, 1000);
};
このコードでは、イベントハンドラをクリックしてドキュメントに指定します.イベントハンドラでは、Windows.eventはイベント変数に保存されます.その後、転送者setTimeout()のクローズドにはイベント変数が含まれています.イベントハンドラをクリックすると、イベントオブジェクトは破棄されます.したがって、クローズド中の参照先のメンバーは存在しなくなります.つまり、COMオブジェクトが破壊された後にそのメンバーに値を付けることができないため、クローズド中にReturn Valueに値を付与すると、メンバーのエラーが発生します.未知の運転時エラー
innerHTMLまたはouterHTMLを使用して以下のようにHTMLを指定すると、未知の運転が発生します.エラー(Unknown runtime error):一つはブロック要素を行の要素に挿入する場合、二つはテーブルの任意の部分にアクセスすることです.のいずれかの属性の場合、例えば、SPanタグにはdivなどのブロックレベルの要素が含まれていないため、以下のコードは未知の運転時エラーを引き起こします.
span.innerHTML=「div Hi/div」 //ここで、spanは、ブロックレベルの要素を不適切な位置に挿入する場合、他のブラウザはエラーを訂正して隠すことを試みるが、IEはこの点ではむしろ本当である.
構文エラー
通常、IE 1レポートで文法エラーが発生したら、すぐにエラーの原因を見つけることができます.この場合、コードの中にセミコロンが一つ足りないか、または括弧が前後して対応していない可能性があります.しかし、もう一つの原因は十分に明らかではない場合は特に注意しなければなりません.
外部のJavaScriptファイルを引用すると、最終的にJavaScriptコードに戻りませんでした.IEも文法エラーを投げます.例えば、script元素のSrc特性がHTMLファイルを指していると、文法エラーが発生します.文法エラーの位置を報告すると、台本の最初の行の文字のところにあると言われます.OperaとSafariも報告されます.エラーが発生しましたが、問題を引き起こす外部ファイルの情報を提供します.IEはこの情報を提供しませんので、外部JavaScriptファイルを繰り返し確認する必要があります.しかし、FirefoxはJavaScriptコンテンツとしてドキュメントに埋め込まれたJava Scriptファイルの解析エラーを無視します.
サーバー側のコンポーネントがJavaScriptを動的に生成する場合、このようなエラーが発生しやすいです.多くのサーバー側の言語は運行エラーが発生した時に、HTMLコードを出力に挿入します.このようなHTMLを含む出力はJavaScript文法に違反しやすいです.文法エラーを追及する時にトラブルが発生したら、もう一度参照の外部を確認してください.これらのファイルにサーバがエラーで挿入されたHTMLが含まれていないことを確認します.
システムが指定されたリソースシステムを見つけられませんでした.指定されたリソースが見つかりませんでした.このような説明は、おそらくIEが提供する最も価値のあるエラーメッセージである.JavaScriptを使用してあるリソースURLを要求するが、URLの長さがIEのURLに対して2083文字を超えてはいけないという制限を超えていると、このエラーが発生する.IEは、JavaScriptで使用するURLの長さを制限するだけでなく、ブラウザ自身で使用するURLの長さを制限することもできる.(他のブラウザのURLに対する制限はそんなに厳しくありません.IEはURLパスに対してもう一つの2048文字を超えてはいけません.以下のコードはエラーを引き起こします.
function createLongUrl(url){
var s = "?";
for (var i=0, len= 2500; i < len; i++){
s += "a" ;
}
return url + s;
}
var x = new XMLHttpRequest( );
x.open("get", createLongUrl("http://www.somedomain.com/"), true);
x.send(null);
この例では、XMLttpRequestオブジェクトは、要求を最大長さ制限を超えるURLに送信しようとしています.Openを呼び出しています.この問題を避ける方法は、文字パラメータに短い名前を付けるか、必要でないデータを減らすことによって、検索文字列の長さを短縮することにほかならない.また、要求方法をPOSTに変更して、検索文字列ではなく要求体でデータを送ることもできる.