Chrome Extension get selected text
Solution 1
You can use the last expression evaluated by the executed code in a callback function:
chrome.tabs.executeScript( {
code: "window.getSelection().toString();"
}, function(selection) {
document.getElementById("output").value = selection[0];
});
Solution 2
You can do this by using Extensions Messaging. Basically, your "background page" will send the request to your service. For example, lets say you have a "popup" and once you click on it, it will do a "Google search" which is your service.
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else
sendResponse({}); // snub them.
});
Some References
Or you can use this plugin
Solution 3
For Angular 8.2 I use this code:
chrome.tabs.executeScript( { code: 'window.getSelection().toString();'}, selectedText => {
(document.getElementById('text-input') as HTMLInputElement).value = selectedText[0];
console.log(selectedText[0]);
});
Christoffer Jacobsen
Updated on December 28, 2020Comments
-
Christoffer Jacobsen over 3 years
I am looking for a way to get the selected text into my Chrome extension.
I want to ex. select a text in facebook feed and when I click my icon it will get it and show the selected text in my Extension.
I got this so far:
chrome.tabs.executeScript(null, { code: "alert(window.getSelection().toString());" })
it gets the selected text and alert it with a message in Chrome. However I want to show it in my html popup. I want to write it out like this:
document.getElementById("output").value = "Selected text here(but how)"
Need help! and I know there is other question about this, but they didn't give me exactly what I want..
-
Christoffer Jacobsen over 10 yearsThis wont send it out to my html doc ?
-
vitaliydev about 7 yearsIt doesn't work in same-origin frames and different-origin frames. Also it freqently returns text that is not actually selected because focus in different frame now. Also it doesn't work in input fields but that's not a problem:
code let el = activeWindow.document.activeElement; if (isTextElem(el)) { if ('selectionStart' in el && el.selectionStart !== el.selectionEnd) { return el.value.substring(el.selectionStart, el.selectionEnd); } }
-
spottedmahn about 4 yearsUncaught Error: extension.sendRequest, extension.onRequest, and extension.onRequestExternal are deprecated. Please use runtime.sendMessage, runtime.onMessage, and runtime.onMessageExternal instead.