QA@IT

Google Chromeの拡張に右クリックメニューを追加しようとするとエラーになる

4091 PV

Google Chromeの拡張を開発しています。右クリックメニューを追加しようと思い、

chrome.contextMenus.create 
({  
    "title":"タイトル",  
    "contexts":["selection"],  
    "onclick":processSelection  
});  
function processSelection ()  
{  
    //選択された文字列をここで処理する
}

と記述したところ、

Uncaught Error: "create" can only be used in extension processes. See the content scripts documentation for more details.

というエラーが発生し、メニューを追加することができませんでした。どうすれば解決できるでしょうか。

回答

content scriptの中から実行しようとしているのではないでしょうか。

Chrome拡張用APIの一部のAPIはcontent scriptからは実行できません。chrome.contextMenus.createもそのひとつです。

content script内で呼び出すかわりに、background pageから呼び出すとメニューが追加できます。

参考: Background Pages

http://code.google.com/chrome/extensions/background_pages.html

background pageは以下の手順で作成できます。

  1. manifest.jsonの "permissions" に "background" を追加
  2. manifest.jsonのルート要素直下に"background_page":"background.html"を追加 (ファイル名は例です)
  3. background.htmlを設置し、そこにchrome.contextMenus.createを記述

メニュー選択時に、選択されている文字列などのデータをcontent script側で処理するには、background pageから「現在開かれているタブ」に対してJSON形式でデータを送り、content script側で受け取れば良いでしょう。

実装例

(background page側)

chrome.contextMenus.create ({
  "title":"タイトル",
  "contexts":["selection"],
  "onclick":sendSelectionToContentScript
});

function sendSelectionToContentScript (clicked, tab) {
  chrome.tabs.sendRequest (tab.id, { selectionText: clicked.selectionText });
}

(content script側)

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  processSelection(request.selectionText);
});

function processSelection (selection) {
  :
  :
}
編集 履歴 (1)
  • コード部分を引用ではなく、コードブロックにスタイル変更しました。編集履歴は今のところ見れませんが、鋭意機能を実装中です。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。