Subscribed unsubscribe Subscribe Subscribe

k-yamadaのブログ

プログラミングのメモ

ChromeExtensionでextensionからcontentscriptにメッセージを送る方法

ここ(http://dev.screw-axis.com/doc/chrome_extensions/guide/message_passing/)を参考に実装していたのですが、extensionからcontentscriptにメッセージを送ることが出来ませんでした。そして、しばらく調べてようやく原因がわかったので、備忘のため書いておきます。


私の作っているChromeExtensionは別Windowでextensionが動作するようになっているため、
chrome.tabs.getSelected」で取得したtabと、contentscriptを定義したタブが異なっており、
contentscriptでメッセージが受け取れていなかったようです。


以下のように修正を行ったところ、contentscriptでメッセージを受信出来ました

修正前

/* extension */

chrome.tabs.getSelected(null, function(tab) {
  chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) {
    console.log(response.farewell);
  });
});

修正後

/* extension */

// get an array of the all windows
chrome.windows.getAll({populate: true}, function(wins) {
  for (wi in wins) { // loop over the windowss
    // get an array of the tabs in the window
    chrome.tabs.getAllInWindow(wins[wi].id, function(tabs) {
      for (ti in tabs) { // loop over the tabs
        chrome.tabs.sendRequest(tabs[ti].id, {greeting: "hello"}, function(response) {
          console.log(response.farewell);
        });
      }
    });
  }
});