在Chrome扩展程序中更改选项卡时的页面内容

时间:2014-02-27 09:00:03

标签: google-chrome-extension

background.js

var htmlcontent = null;

chrome.tabs.onUpdated.addListener(function() {
onWindowLoad();
alert(htmlcontent);
});

chrome.tabs.onHighlighted.addListener(function(){
onWindowLoad();
alert(htmlcontent);
});

function onWindowLoad() {
chrome.tabs.executeScript(null, {
file: "getPagesSource.js"
}, function() {
if (chrome.extension.lastError) {
htmlcontent = 'There was an error injecting script : \n' + chrome.extension.lastError.message;
}
});
}

chrome.extension.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
htmlcontent = request.source;
}
});

getPagesSource.js

function DOMtoString(document_root) {
return document.body.innerText ;
}

chrome.extension.sendMessage({
action: "getSource",
source: DOMtoString(document)
});

我正在开发Chrome扩展程序。我可以在重新加载时获取当前窗口的Body Content,但是当我更改选项卡时,我无法获取内容。上一个标签的内容已保存。我使用错误的API吗?或者如何在Chrome中更改标签时触发onUpdate功能?

2 个答案:

答案 0 :(得分:1)

终于找到了它。

我在chrome.tabs.onHighlighted.addListener(function()中打印html内容。在那一刻,我仍然无法获得该值。

htmlcontent值仅在chrome.extension.onMessage.addListener(function()。

中设置。

因此,如果您尝试打印htmlcontent,您仍然可以使用之前标签的内容。

所以流程是,

chrome.tabs.onUpdated.addListener(function() {
onWindowLoad();
});

function onWindowLoad() {
chrome.tabs.executeScript(null, {
file: "getPagesSource.js"
}, function() {
if (chrome.extension.lastError) {
htmlcontent = 'There was an error injecting script : \n' +     chrome.extension.lastError.message;
}
});
}

chrome.extension.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
htmlcontent = request.source;
//call whatever function from here on so that htmlcontent will have the selected tab's content.
}
});

答案 1 :(得分:0)

通过“当我更改标签时”,您的意思是更改哪个标签处于活动状态?

确保您了解标签API中事件和回调的参数: http://developer.chrome.com/extensions/tabs

我不确定您要执行的操作,但更改了哪个选项卡处于活动状态时会触发tabs.onActivated事件。也许你想为它添加一个监听器,而不是tabs.onHighlighted。

此外,chrome.tabs.executeScript的第一个参数应该是您要执行脚本的选项卡的选项卡ID(如果为null,则在活动选项卡中执行)。标签事件的回调具有附加参数,例如标签所在的窗口,或标签是否仍在加载或完成。