3

Webテクノロジーを使用してデスクトップアプリを開発するためのプラットフォームを開発しています。そうする過程で、私はプラットフォームに統合するブラウザでいくつかのドキュメント/オンレディ機能を動作させるように努めてきました。これが、私が以前にSOでこの質問をした理由です:javascript-framework-that-primally-provides-just-document-onready-functionality

しかし、私は自分の選択したブラウザ(shush、その秘密;)を取得して、上記の唯一の答えによって提案された機能をうまく利用することができませんでした。だから、何がうまくいくのかを理解しようとしているときに、私は次のことに気づきました。

以下のコードは、1ミリ秒のタイムアウト後に関数を実行するだけで、このブラウザー内で同じ効果があります。大きな画像の読み込み中にDOMに書き込むことができます。これは私にとって究極の解決策ではないかもしれません。このブラウザのJavascriptエンジンによってDOM機能がどのように実装されるかに固有の何かを書くかもしれません。

それでも、これが標準のブラウザーで機能するかどうかを確認することにしました。驚いたことに、機能します。それに照らして、私の質問:さまざまなJavascriptフレームワークによって提供されるdom / readiness機能のさまざまな実装は、単にやり過ぎですか?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
setTimeout(function() {
    var txtNode = document.createTextNode("ready_yet?");
    var ready_yet_el = document.getElementById("ready_yet");
    ready_yet_el.appendChild(txtNode);
},1);
</script>
</head>

<body>
<div id="ready_yet"></div>
<img src="http://www.ryanmorr.com/tests/ondomready/pic.jpg" />
</body>

</html>

編集/さらなる考え私の前の関連する質問への回答によってリンクされたページには、「FirefoxとOperaの場合、イベントタイプの簡単なチェックでDOMContentLoadedかどうかが判断されます。SafariとIEはドキュメントの準備完了状態をチェックします... 。最後に、他のすべてが失敗した場合、onloadイベントが後部を起動します。」おそらく、上記のsetTimeoutに似たsetIntervalは、最後の手段としてonloadに依存する前に、最後から2番目のアクションである可能性がありますか?いずれにせよ、私が選択した埋め込み可能なブラウザーでは、DOMContentLoadedイベントもdocument.readyStateもサポートされていないようです。

4

3 に答える 3

4

あなたの予感は良く、しっかりと確立されたIMOです。しかし、誰かがすでにあなたを殴りました。簡単に言えば、それはすべての場合にDOMの準備状況を検出するための実用的な実装でsetTimeoutないということです。お使いのブラウザには問題ないかもしれませんが、状況によってはIEが失敗します。

Microsoft独自のASP.NETAJAXフレームワークがこのsetTimeoutトリックを使用してDOMの準備状況を検出していることを知っておくと興味深いかもしれません。そして驚き、驚き:特定のユースケースでも失敗します

要するに、問題は、ファイルサイズが大きい(たとえば、約500K)か、ネットワーク/サーバーの遅延が原因で、スクリプトの読み込みが遅いIEにあるようです。

于 2009-09-05T00:09:21.120 に答える
3

いいえ、DOMの「準備ができていない」バグが現れると、信じられないほど珍しく、予測や追跡が困難になるためです。それぞれが(もちろん)発生するブラウザに固有です。

これらの問題を完全に回避し、常に準備が整ったDOMを処理することを知っている方がはるかに簡単です。

例として、しばらく前に、99%の確率で完全に機能することで明らかになった、みんなのお気に入りのブラウザでDOMの準備ができていないバグがありましたが、ページのコンテンツにsrc属性を含むimg要素が含まれている場合、およびコンテンツには、in内に任意の数のliが含まれるul要素も含まれていました...これらのいずれかが当てはまらなくてもバグはありませんでした。

今は「ああ、それはDOMの問題だった」と言うのは簡単ですが、当時は...いいえ、それほど簡単ではありませんでした。

于 2009-09-04T20:53:56.577 に答える
0

単純に、いいえ。接続が遅く、ロードするファイルが複数ある場合、ブラウザがまだ存在しない要素でスクリプトを実行しようとしていることに気付かないでしょう。

于 2009-09-04T20:56:03.360 に答える