chrome.browserAction.onClicked.addListener テンプレート

Google Chrome拡張機能用。あるページがすでに開かれていればそのタブを選択。開かれていなければ新規タブでページを開く。HOGE.htmlのところを開きたいページのパスに書き換える。

素直にforループにした。

chrome.browserAction.onClicked.addListener(function () {
  var url = chrome.extension.getURL('HOGE.html');
  chrome.tabs.getAllInWindow(null, function (tabs) {
    var tab;
    var i;
    for (i = 0; tab = tabs[i]; ++i) {
      if (tab.url === url) {
        chrome.tabs.update(tab.id, { selected: true });
        return;
      }
    }
    chrome.tabs.create({ url: url, selected: true });
  });
});
chrome.browserAction.onClicked.addListener(function () {
  var url = chrome.extension.getURL('HOGE.html');
  chrome.tabs.getAllInWindow(null, function (tabs) {
    tabs.some(function (tab) {
      if (tab.url === url) {
        chrome.tabs.update(tab.id, { selected: true });
        return true;
      }
      return false;
    }) || chrome.tabs.create({ url: url, selected: true });
  });
});

Array#someは、見方を変えれば途中で抜けられるArray#forEach(参考:配列を走査するときに、途中でループを抜けるにはsomeが使える - os0x.blog)。