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

时间:2011-12-14 04:09:01

标签: 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;
});
});
});

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

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({});
});

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

2 个答案:

答案 0 :(得分:33)

您可以使用document.body.innerTextdocument.all[0].innerTextcontent script中执行此操作 它将在页面中显示所有 文本内容 ,而不包含任何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

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

  • 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;
        }
    });
});

内容脚本

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

这应该有用。

答案 1 :(得分:0)

使用executeScript :(需要权限activeTab

chrome.tabs.executeScript(null, {
    code: `document.all[0].innerText`,
    allFrames: false, // this is the default
    runAt: 'document_start', // default is document_idle. See https://stackoverflow.com/q/42509273 for more details.
}, function(results) {
    // results.length must be 1
    var result = results[0];
    process_result(result);
});

如果code很复杂,则可以在内容脚本中定义一个函数,然后在code中调用该函数(或使用file)。