サイトに埋め込んだjavascriptからchrome拡張のoptionページを開く

例として、backgroudからコンテンツメニューをサイト側に送って
サイト側のコンテンツメニューから、chrome拡張のoptionページを開きたい場合

サイト側でaタグでchrome拡張のoptionページ、chrome-extention://gesdfsdfer/option.htmlを指定しても、セキュリティ上の理由で開くことはない。popup.htmlページではもちろん問題ない。

が、出来ないわけではない。

1.backgroundからjavascriptを送り込む
2.サイトに送り込んだjavascriptでコンテンツメニューを作成する
3.javascriptでコンテンツメニューをクリックしたときにカスタムイベントを発生させる
4.content_scriptsでカスタムイベントを受け取る
5.content_scriptsで受け取ったイベントをbackgroundにメッセージを投げる
6.backgroundで投げられたメッセージを受け取る
7.backgroundでオプションページを開く

ただ、かなり手間が掛かります。

    var e = document.createEvent('CustomEvent');
        e.initCustomEvent('fromSiteToBackgroundCall', true, true,'openOptions');
        document.body.dispatchEvent(e);
  • content_scripts
document.body.addEventListener('fromSiteToBackgroundCall', function (e) {
  chrome.runtime.sendMessage({type:'fromSiteToBackgroundCall',call:e.detail},function(data){});
});
  • backfround
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.type == 'fromSiteToBackgroundCall'){
    switch(request.call){
      case 'openOptions':
        chrome.tabs.create({url:chrome.extension.getURL('options.html')});
        break;
    }
  }

});