ログ日記

作業ログと日記とメモ

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);
  // 非同期のイベントはまだ登録されていないので実行されない
}

のようなことになっているのではないかと。
これは困った…。