window.onload を使用して、ページが完全に読み込まれた後に実行する必要があるJavaScriptコードを呼び出しています。私が読んだことから、これはそのようなスクリプトを呼び出すための推奨される方法です。
ただし、一部のAjaxサイト (www.bing.com など) では機能しません。ページが完全にレンダリングされる前に window.onload が呼び出されます。
助言がありますか?
window.onload を使用して、ページが完全に読み込まれた後に実行する必要があるJavaScriptコードを呼び出しています。私が読んだことから、これはそのようなスクリプトを呼び出すための推奨される方法です。
ただし、一部のAjaxサイト (www.bing.com など) では機能しません。ページが完全にレンダリングされる前に window.onload が呼び出されます。
助言がありますか?
簡単に言えば、この問題を解決する一般的な方法はありません (現時点では)。
「ページ」の定義は、AJAX が登場すると非常に柔軟です。最初のページ読み込みの一部として意図されている AJAX とそうでない可能性がある AJAX の違いを見分けるのはかなり困難です。そのため、ブラウザは window.onload() を起動するタイミングを決定するために独自に残され、常に希望どおりになるとは限りません。
幸いなことに、ほとんどの人は一般的な解決策ではなく、特定の解決策を必要としています。bing.com に関心がある場合は、bing.com がどのように機能するかを調べて、サイトが許容できる状態に達したときにトリガーされるようにコードを設計することができます。
私はこれに数回取り組んできましたが、何らかの onload イベントのトリガーが必要な通常の理由は、HTML DOM と対話し、getElementById、getElementsByTagName、またはその他のさまざまな DOM セレクターを使用して、何も返さないことです。 .
繰り返しますが、あなたが解決しようとしている正確な問題はわかりませんが、ある種のオンロードを使用する必要があり、それがある種の DOM トラバーサルが原因である場合は、次のようなコードで少しごまかすことができます:
window.onload = pageChecker;
function pageChecker() {
// Onload has fired, but we don't trust it.
// Check to see if our deepest nested element can be found
var testElement = document.getElementById("importantElement");
if ( !testElement ) {
// Try again in a bit, adjust timeout to what your users
// can tolerate
setTimeout(pageChecker, 50);
}
else {
//
// ... the element exists, run important code below ...
//
}
}
イベントをグローバルにリッスンすることで変更とリクエストをリッスンしDOMSubtreeModified
、何をしようとしてもreadystatechange
イベントの代わりにそれらのイベントを使用できる場合があります。load
jQuerys $(...).ready() メソッドを使用することをお勧めします。
Rasmus Kaj からの回答に加えて、jQuery を使用している場合は、Global Ajax Event Handlersを参照してください。
jQuery.fn.ajaxComplete
( http://api.jquery.com/ajaxcomplete/ )jQuery.fn.ajaxStop
( http://api.jquery.com/ajaxstop/ )これは、ネイティブの onload イベントとは関係がないことに注意してください。