Chrome扩展程序 - 获取当前标签的全文内容

ana*_*thv 26 html text google-chrome-extension

我正在开发一个扩展,我需要在当前选项卡上获取整个文本内容.现在我有一个插件,可以从当前选项卡中检索所选文本.所以,本质上我正在寻找它的ctrl-A版本:).到目前为止,这是我从@Derek那里得到的提示.

这是在我的事件处理程序中(这只是一个,还有其他侦听器onUpdated等):

chrome.tabs.onSelectionChanged.addListener(function(tabId,changeInfo,tab){  
chrome.tabs.getSelected(null,function(tab){
chrome.tabs.sendRequest(tab.id, {method: "getSelection"}, function (response) {
  selectedtext = response.data;
});
chrome.tabs.sendRequest(tab.id, {method: "getText"}, function (response) {
  alltext = response.data;
});
});
});
Run Code Online (Sandbox Code Playgroud)

这是我在内容脚本中写的:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
  sendResponse({data: window.getSelection().toString()});
else if (request.method == "getText")
  sendResponse({data: document.body.innerText});
else 
  sendResponse({});
});
Run Code Online (Sandbox Code Playgroud)

然而,document.body.innerText返回undefined.我需要当前标签的全部内容alltext.有人可以帮我解决这个问题吗?谢谢.

Der*_*會功夫 37

您可以在内容脚本中使用document.body.innerTextdocument.all[0].innerText执行此操作. 它将获取页面中的所有文本内容,而不包含任何HTML代码.

或者您可以使用document.all[0].outerHTML获取整个页面的HTML.


在内容脚本中

function getText(){
    return document.body.innerText
}
function getHTML(){
    return document.body.outerHTML
}
console.log(getText());             //Gives you all the text on the page
console.log(getHTML());             //Gives you the whole HTML of the page
Run Code Online (Sandbox Code Playgroud)

添加

因此,您希望内容脚本将文本返回到弹出窗口.您可以使用:

  • chrome.tabs.getSelected 选中标签,
  • chrome.tabs.sendRequest 发送请求到内容脚本,
  • chrome.extension.onRequest.addListener听取请求.

弹出页面

chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {method: "getText"}, function(response) {
        if(response.method=="getText"){
            alltext = response.data;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

内容脚本

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        if(request.method == "getText"){
            sendResponse({data: document.all[0].innerText, method: "getText"}); //same as innerText
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

这应该工作.

  • 对于阅读此内容的任何人,请求现已弃用,以支持消息:http://stackoverflow.com/questions/13709409/is-chrome-extension-onrequest-deprecated (2认同)