Chrome Extentionの作成メモ

現在閲覧中のページに自分のExtentionのContentScriptが埋め込まれているか埋め込まれていないかで、BackgroudnPageでの処理を変える方法についてのメモ。

それには、javascriptの組み込み関数setTimeoutを利用する。そして、BackgroundPageからContentScriptにメッセージを送り、一定時間内に返信が来るかどうかで処理を分けるようにする。

実際には、こんな方法でなくてもAPIとして用意されてそうなので、しっかり調べる。

記述例

ContentScriptsの記述
chrome.extension.onRequest.addListener(function(req, sender, sendResponse) {
  /*
    具体的な処理 ...
  */
  
  //BackgroundPageへ返信
  sendResponse(str);
});
BackgroundPageの記述
var timerId;

//閲覧中のページにコンテンツスクリプトを埋め込めなかった場合の処理
var f = function(...) {
  /*
    具体的な処理 ...
  */
}

chrome.tabs.getSelected(null, function(tab) {
  //閲覧中のページから、一定時間(50ミリ秒)返信が来なかったら実行
  timerId = setTimeout(f, 50);
  
  //BackgroundPageから閲覧中のページのContentScriptsに対してリクエストを送る
  chrome.tabs.sendRequest(tab.id, req, function(text) {
      //以下の処理は、一定時間内に返信が来た場合に実行
      //つまり、閲覧中のページにContentScriptsが存在する
      
      //最初に、閲覧中のページにコンテンツスクリプトを埋め込めなかった場合の処理をキャンセル
      clearTimeout(timerId);
      
      /*
       具体的な処理 ...
      */
    })
  });
}