2009-04-03 8 views
2

私はJavaScriptコンポーネントの初期化を実行していましたが、 "onload"イベントが起動し、main()のソートを実行するのを待っていました。よりきれいに見えて、DOMのID状態が整っていることを確認できました。しかし、それをペースに入れてしばらくして、コンポーネントの初期化は、負荷(画像、CSS、iframe、フラッシュなど)中にぶら下がっているあらゆる種類のリソースによって詰まっていることがわかりました。HTMLの最後または "onload"でJSコンポーネントを初期化しますか?

私はインライン<script />の実行を使用してHTMLドキュメント自体の最後に初期化呼び出しを移動し、他の外部リソースの前に初期化をプッシュすることがわかりました。

「オンロード」を待つのではなく、そのような落とし穴があるのだろうかと思います。

どちらの方法をお使いですか?

EDIT:ありがとう。各ライブラリには、DOMContentLoaded/readyState実装の違いに特化した機能があるようです。私はプロトタイプを使用するので、私が必要としているのはthisです。

答えて

4

、我々はjqueryのを使用し、その文書レディ状態はDOMことを保証しますあなたが言うように、リソースを待っているわけではありません。もちろん、これにはJavaScriptフレームワークなしで、これを行うことができます。たとえば、document readyのような関数を作成する必要があります。ページの最後にスクリプトを置くのは、残りのページが確実に存在することを確認しますが、 DOMは準備ができていることは決して悪いことではありません。

2

jQueryの$(ドキュメント).ready()

を持っていることは、「ロードされ」ているとき、文書が必ずしも準備ができている、といないときほとんどのスクリプトを実行するためにその時の理想的なポイントです。私はどちらも使用

See here

1

。代わりに、私はYUI's onDomReady()(またはonContentReady()/ onAvailable())に依存しています。なぜなら、私の初期化のタイミングを処理するからです。私にとって

(これは一般的なJSの問題であるように、他のJSライブラリは、ページが完全にロードされた一度だけ実行するための同様の方法を持っている。)

1

これは(X)HTML仕様に準拠していないため、私はそれに反対しています。それはあなたのサイトをブラウザの奇妙なモードにするでしょう。

1

問題の周りの正しい方法は、すべてのブラウザでサポートされていないDOMContentLoadedイベントを、使用することです。ライブラリは、ブラウザ間で、この機能を提供することが可能であるので、ハック(例えばポーリングdoScroll()onreadystatechangeを使用して)が、存在します。

しかし、人気のJavaScriptフレームワークによって対処されていない転送がDOMContentLoadedの問題が残っているとチャンク。

ここはmy take on the issueです。

関連する問題