Obtenir le texte sélectionné dans une extension chromée

Je veux créer une extension qui prend le texte sélectionné et la recherche dans Google translate, mais je ne peux pas comprendre comment obtenir le texte sélectionné.

Voici mon manifeste.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" ] } 

Et mon fichier 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"]}); 

Et mon fichier content_script.js

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

Comment puis-je obtenir le texte sélectionné?

Vous devenez un peu plus compliqué qu'il ne l'est vraiment. Vous n'avez pas besoin d'utiliser un message entre le script de contenu et la page d'arrière-plan car la méthode contextMenus.create peut déjà capturer le texte sélectionné. Essayez d'ajuster votre script de création à quelque chose comme:

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

Ensuite, ajustez votre fonction pour simplement obtenir l'information.selectionTexte:

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

Veuillez noter que si vous souhaitez accéder à distance à un site externe comme Google Translate, vous devrez peut-être ajuster vos paramètres d'autorisations.