extension の Event Page を手動で無効にする
Event Page が無効になった時のテストをしたい。
chrome.webNavigation.onReferenceFragmentUpdated.addListener
で登録した関数は、無効のときはどのように動くのか?など。
https://stackoverflow.com/questions/17808135/chrome-extension-onsuspend-is-never-called
ここに書いてあった。バックグラウンドページで
window.close();
なるほど。
ちなみにグローバル空間トップで 上記 addListener を使った場合は大抵マニュアル通りなんだけど、addListenerをsetTimeoutで挟むと登録した関数は呼び出されない。
chrome.storage.sync.get({ options: '' }, function(val) { chrome.webNavigation.onHistoryStateUpdated.addListener(callback, {url: [{urlMatches: val}]}); });
とかやると、イベントページが起動した瞬間にはcallbackは呼び出されない。
function f(){ chrome.webNavigation.onHistoryStateUpdated.addListener(callback, {url: [{urlMatches: val}]}); }; f();
のように同期実行なら関数の中でも問題ない。
おそらく本体側で
// background pageを毎回生成 if (!this.hasFilteredListeners(patternData)) return; var bg = newBg(); // この時点で同期実行されたaddListenerのイベントは登録されている for(var listener in this.getFilteredListeners(patternData)){ listener.fire(bg, data); // 非同期のイベントはまだ登録されていないので実行されない }
のようなことになっているのではないかと。
これは困った…。