我正在开发一个扩展程序,我需要在当前选项卡上获取整个文本内容。现在我有一个插件,可以从当前选项卡中检索所选文本。所以,本质上我正在寻找它的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
中当前标签的全部文字。有人可以帮我解决这个问题吗?
感谢。
答案 0 :(得分:33)
您可以使用document.body.innerText
或document.all[0].innerText
在content 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
)。