1

現在、サードパーティのサイトに配置するスクリプトに取り組んでいます...それをテストするために、サードパーティのサイトを開いて、ブラウザのコンソール(Chrome)でスクリプトを実行しています。window.load()で実行する必要のあるコードがいくつかありますが、そのコードはこのテスト方法では実行されていません。これは、loadによってウィンドウにバインドされたコードが、loadイベントが発生した後にバインドされているため、トリガーされないためだと思います。私の質問には2つの部分があります。

  1. loadイベントがトリガーされた後に追加されているため、window.loadが実際にトリガーされていない理由はありますか?または、これは間違っており、他の場所で問題が発生している可能性がありますか?

  2. このようにコンソールからJavaScriptを追加するときに、ロード時にトリガーされるイベントをどのようにシミュレートできますか?

4

2 に答える 2

1

if(document.readyState === "complete"){ロードがすでに完了しているかどうかを検出します。

elseを簡単に使用して、まだロードが完了していない場合は、ロードイベントハンドラーに入れることができます。次のようなもの:

if(document.readyState === "complete"){
  // do stuff
}else{
  // attach load handler
}

私がやりたいのはpageLoaded、後でコードを使用して実行できる型関数を定義することです。これにより、ページが既に読み込まれている場合はすぐに呼び出すことができ、ページの読み込みが発生したときに読み込みハンドラーに呼び出すことができます。何かのようなもの:

var pageLoaded = function(){alert("Page is ready!");}
if(document.readyState === "complete"){
  pageLoaded()
}else{
  // attach load handler, calls pageLoaded()
}

もちろん、質問にjQueryのタグを付けたので、いつでもすべてのコードをjQueryの便利なダンディレディ関数の省略形でラップすることができます。

$(function(){
  // do stuff
});

これにより、無名関数がjQueryに渡され、上記のバニラJavaScriptとまったく同じではないにしても、非常によく似た処理が実行されます。

于 2012-08-16T17:38:05.533 に答える
0

関数でイベントを定義してから、コンソールからその関数を呼び出します。

function do_this_on_load() { alert("Loaded!") }

$(window).load(do_this_on_load);

次に、コンソールから次の操作を実行できます。

do_this_on_load();

ページ上で何をするかを確認します。

于 2012-08-16T17:46:31.267 に答える