8

JavaScriptソリューションの1つが信頼できることを確認するために、window.documentオブジェクトについて調査を行っています。window.documentオブジェクトがnullまたは未定義の場合はありますか?

説明のために、ここに関連性のないコード例を示します。このコードが失敗する(別名、例外をスローする)状況はありますか?

$(document).ready(function() {
    var PageLoaded = (window.document.readyState === "complete");
});
4

4 に答える 4

4

window.documentオブジェクトがnullまたは未定義の場合はありますか?

はい、ドキュメントに含まれていないJavaScriptコード(node.jsなど)の場合は可能です。ただし、そのようなコードにはウィンドウオブジェクトがない場合もあります(グローバルオブジェクトはありますが)。

W3C DOMに準拠したユーザーエージェントのHTMLドキュメントのコードの場合、いいえ。

> Are there any situations in which this piece of code will fail (i.e. throw
> an exception)?
> 
> [snip jQuery code]

それはどこで失敗します:

  1. jQueryの準備ができた機能が失敗する(少なくとも一部のブラウザーでは、デスクトップや一部のモバイルデバイスで一般的に使用されているブラウザーではない可能性があります)。
  2. ないwindow object、または
  3. window.documentオブジェクトはありません

さまざまなホストで動作するコードに自信を持ってもらうために、次のようなことを行うことができます。

  if (typeof window != 'undefined' && window.document &&
      window.document.readyState == whatever) {
      // do stuff
  }

これは書くのにそれほど余分なことではなく、おそらく一度だけ行う必要があります。

代替案:

(function (global) {
  var window = global;
  if (window.document && window.document.readyState == whatever) {
    // do stuff
  }
}(this));

(function (global) {
  var window = global;

  function checkState() {
    if (window.document && window.document.readyState) {
      alert(window.document.readyState);
    } else {
      // analyse environment 
    }
  }
  // trivial use for demonstration
  checkState();
  setTimeout(checkState, 1000);
}(this));
于 2012-08-25T13:24:59.160 に答える
1

ドキュメントは常に定義されていると思います。ブラウザに表示されるのはhtmlドキュメントであるためsite is not availableです。詳細documentは、読み取り専用プロパティです

window.document = null; 
console.log(window.document); //Document some.html#
于 2012-08-25T03:45:45.667 に答える
1

JavascriptがWebブラウザ/ユーザーエージェント以外の場所で実行されるという事実を無視すると、pageLoadedテストはiframeで失敗する可能性があります(テストされていませんが、奇妙になることはわかっています)。

「ページが読み込まれた」とはどういう意味かについても疑問があるかもしれません。DOMがレンダリングされ、要素を操作する準備ができているかどうかを確認しようとしていますか?または、ページの読み込みが実際に完了しているかどうかを確認していますか。これには、グラフィックなどの他のすべての要素も読み込まれていることが含まれます。

この議論は役に立つかもしれません: フレームワークなしでDOMが準備ができているかどうかをチェックする方法は?

于 2012-08-25T03:47:13.957 に答える
0

javascriptコードはhtmlドキュメントで記述しなければならないため、コードをドキュメントから実行することはできません。つまり、ドキュメントやjavascriptを使用しないでください。

于 2012-08-25T04:53:33.520 に答える