2016-08-15 5 views
0

私はChrome拡張機能のイベントページを学習しており、ドキュメントに従って、スクリプトは必要なときにのみ読み込まれます。クロム拡張のイベントページにイベントリスナーを繰り返し追加してもよろしいですか?

// Some declarations 

chrome.browserAction.onClicked.addListener(goToInbox); 

// ... 

そして、私はイベントスクリプト記述:私は私の拡張機能は、Googleの新しいタブを再読み込みした後

chrome.tabs.create({url: 'https://www.google.com'}); 

function onClickListener() { 
    chrome.tabs.create({url: 'https://www.bing.com'}); 
} 

chrome.browserAction.onClicked.addListener(onClickListener); 

をそれから私はGoogle Mail Checkerのイベントページのスクリプトは、イベントリスナーを追加することを見つけます。 comが期待通りに開かれました。その後、Chromeのタスクマネージャで拡張機能のプロセスが終了し、拡張機能アイコンがクリックされました。その後、google.comとbing.comの両方が開きます!だから私はこのスクリプト全体が再び読み込まれることを知ります。

Google Mail Checkerのスクリプトをもう一度見てみましょう。リスナーは、スクリプトがロードされた後に繰り返し追加されるので、私の質問です:リスナーを繰り返し追加してもよろしいですか?スクリプトがロードされたときにリスナーの動作がAからBに変わる場合、どちらが2番目のロードAまたはBで起動されますか?

答えて

1

documentationは、イベントリスナーはイベントページのコンテキストにのみ存在すると記載されているため、論理的には不可能です。つまり、イベントページがアンロードされると自動的に削除されます。ある程度、リスナーを繰り返し追加しても問題ありませんが、実際には一度だけ追加しています。

自体が唯一のイベントページのコンテキスト内に存在し、リスナーので、あなたはのaddListenerするたびに使用しなければならないイベントページがロード

とChromeも述べているbest practices when using event pages

の最初の行に

イベントページがロードされるたびに、自分の内線が関心のあるイベントを受け取るために登録します。イベントページは、新しいバージョンのエクステンションごとに1回ロードされます。その後、登録されたイベントを配信するためにのみロードされます。これは、一般に、イベントリスナーをイベントページの最上位レベルのスコープに追加する必要があります。そうでない場合は、イベントページがリロードされたときに使用できないことがあります。

+0

リスナーがすべて破棄された場合、スクリプトを再読み込みするタイミングをChromeはどのように知っていますか?クロムには拡張機能によって登録されたイベントのリストがあり、イベントが発生するとクロムはスクリプトをリロードし、イベントリスナーがあればそれを呼び出します。 – Perqin

関連する問題