2

選択したテキストを取得して Google 翻訳で検索する拡張機能を作成したいのですが、選択したテキストを取得する方法がわかりません。

これが私のmanifest.jsonです

{
"manifest_version": 2, 
"name": "Saeed Translate",
"version": "1",
"description": "Saeed Translate for Chrome",
 "icons": {
    "16": "icon.png"
  },
"content_scripts": [ {
      "all_frames": true,
      "js": [ "content_script.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_start"
   } ],
"background": {
    "scripts": ["background.js"]
  },
"permissions": [
"contextMenus",
"background",
"tabs"
]

}

と私の background.js ファイル

var text = "http://translate.google.com/#auto/fa/";
function onRequest(request, sender, sendResponse) {
   text = "http://translate.google.com/#auto/fa/";
   text = text + request.action.toString();

 sendResponse({});
};

chrome.extension.onRequest.addListener(onRequest);
chrome.contextMenus.onClicked.addListener(function(tab) {
  chrome.tabs.create({url:text});
});
chrome.contextMenus.create({title:"Translate '%s'",contexts: ["selection"]});

と私の content_script.js ファイル

var sel = window.getSelection();
var selectedText = sel.toString();
chrome.extension.sendRequest({action: selectedText}, function(response) {
  console.log('Start action sent');  
});

選択したテキストを取得するにはどうすればよいですか?

4

1 に答える 1

10

あなたはそれを実際よりも少し複雑にしています。contextMenus.createメソッドはすでに選択されたテキストをキャプチャできるため、コンテンツスクリプトとバックグラウンドページの間でメッセージを使用する必要はありません。作成スクリプトを次のように調整してみてください。

chrome.contextMenus.create({title:"Translate '%s'",contexts: ["all"], "onclick": onRequest});

次に、関数を調整して、info.selectionTextを取得します。

function onRequest(info, tab) {
var selection = info.selectionText;
//do something with the selection
};

グーグル翻訳のような外部サイトにリモートアクセスしたい場合は、権限設定を調整する必要があるかもしれないことに注意してください。

于 2013-01-11T03:45:49.460 に答える