首先,所有答案都会受到很大关注,因为我的想法已经不合时宜了。
我有一个简单的"需要解决的问题。我想做一个chrome扩展,它基本上会跟踪你正在访问的网站(包括内容)。 要澄清,我们完全同意用户执行此操作。: - )
到目前为止,我做的并不好(我尝试使用chrome API提供的许多钩子,即chrome.webNavigation.onCommitted
,chrome.webRequest.onBeforeRequest
,{{1 }},chrome.webNavigation.onCompleted
,chrome.webRequest.onBeforeRedirect
)。
到目前为止,最好的选择是使用chrome.history.onVisited
,但是再一次,我不知道如何从中获取网站内容 - 我已经尝试执行返回{{的内容脚本1}},但为了做到这一点,我需要知道chrome.history.onVisited
,它在那里不可用。
基本上,有些东西在chrome API或我的想法中搞砸了 - 可能是后者:)
我想指出,它几乎可行,但并非在所有情况下都有效。我很难调试哪些案例失败了。
非常感谢我可以获得的所有提示!
答案 0 :(得分:0)
根据您在评论中的说明,我建议您使用content scripts和message passing。
当用户按下"开始录制"您可以从后台页面 - execute content script按钮,它将与已打开的页面的内容相交,然后将其发送回后台页面以进行进一步处理(可能保存)。您可以使用chrome.tabs.query函数查询任何窗口中的所有选项卡:
chrome.tabs.query({}, function(tabs){
console.log(tabs); //tabs array contain all tabs in all windows.
});
迭代此数组,您可以使用它在tab的所有标签中执行脚本.id:
tabs.forEach(function(tab){
chrome.tabs.executeScript(tab.id, { 'file': 'cs.js' })
});
然后,您可以附加事件处理程序以侦听选项卡中的更改:
chrome.tabs.onUpdated.addListener(function(change){
if(change.status === 'complete'){
//inject content script
}
});
第二种情况是向每个页面用户访问添加内容脚本,添加适当的清单条目:
...
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["cs.js"]
}
],
...
加载cs.js后,您可以调用后台页面并询问扩展名是否应捕获页面内容(使用消息传递)。如果是 - 如上所述,如果不是,则不做任何事。
这是做你需要的最简单,最方便的方法。