2011-08-09 16 views
3

Firefoxの拡張機能でサイトの負荷を管理するのに少し問題があります。JavaScriptのイベントリスナーにタイマーを追加する

私はJavaScriptを使用してFirefox拡張機能を開発して、自分のウェブサイトのリストの文字列を検索し、悪い言葉を探します。問題は私がリストを一つ一つ探していることです。つまり、Webページをロードしていて、DOMContentLoadedにイベントリスナーを追加します。 DOMが関数をロードするときに文字列を検索するために呼び出されます。しかし、ページが読み込まれない場合(たとえばネットワークの問題)、関数は決して呼び出されません。

イベントリスナーにタイマーを設定する方法はありますか?イベントが5秒以内にトリガーされない場合は、何かをしてください。それを行う別の方法がある場合は、アドバイスをお願いします! 私は多くのコードを最小限に抑えましたが、ここでそのアイデアを得ることができると思います。

function main_(){ 
      //do some stuff here and if needed call to open a new page 
      waitForDOM(); 
} 

function waitForDOM(){ 
      //if the list of pages is grather than 0 then 
    //add the new tab here and create the event listener 
    gBrowser.addEventListener('DOMContentLoaded',pageLoaded,true); 
} 

function pageLoaded(aEvent) { 
     //do the search here and calls the function waitForDOM to load a new page and a event listener 
    waitForDOM(); 
} 

答えて

2

Firefox拡張機能のコーディングについてはわかりませんが、一般的な意味では、特定の時間内にイベントハンドラが呼び出されない場合は、何かをするためのタイマーを設定することができます。このような何か:

var eventTriggeredFlag = false; 

function waitForDOM(){ 
    gBrowser.addEventListener('DOMContentLoaded',pageLoaded,true); 
    setTimeout(function(){ 
       if (!eventTriggeredFlag) { 
        // time's up without the event: do something 
       } 
      }, 5000); 
} 

function pageLoaded(aEvent) { 
    eventTriggeredFlag = true; 
    // whatever else you want to do here... 
} 

あなたは別のタイマーで複数のイベントを追跡するために必要がある場合には、明らかに、おそらくいくつかの閉鎖やイベントか何かの配列で、それをさらに複雑にする必要があると思います。

+0

この回答をありがとう、私はsetTimeoutを使用すると思いませんでした!賢いアプローチ。 – h3ct0r

0

それは代わりにDOMContentLoadedを使用してのadd a progress listenerに優れています。エラーがあるかどうかにかかわらず、ページの読み込みが完了すると、進捗リスナーのメソッドonStateChangeは常にSTATE_STOPSTATE_IS_WINDOWフラグで呼び出されます。 Components.isSuccessCode(aStatus)に電話して、ページが正常に読み込まれたかどうかを確認できます(ネットワークエラーのみが表示されますが、404などのHTTPエラーは成功とみなされます)。

関連する問題