从Chrome扩展程序

时间:2015-08-06 17:10:11

标签: javascript html google-chrome google-chrome-extension

首先,所有答案都会受到很大关注,因为我的想法已经不合时宜了。

我有一个简单的"需要解决的问题。我想做一个chrome扩展,它基本上会跟踪你正在访问的网站(包括内容)。 要澄清,我们完全同意用户执行此操作。: - )

到目前为止,我做的并不好(我尝试使用chrome API提供的许多钩子,即chrome.webNavigation.onCommittedchrome.webRequest.onBeforeRequest,{{1 }},chrome.webNavigation.onCompletedchrome.webRequest.onBeforeRedirect)。

到目前为止,最好的选择是使用chrome.history.onVisited,但是再一次,我不知道如何从中获取网站内容 - 我已经尝试执行返回{{的内容脚本1}},但为了做到这一点,我需要知道chrome.history.onVisited,它在那里不可用。

基本上,有些东西在chrome API或我的想法中搞砸了 - 可能是后者:)

我想指出,它几乎可行,但并非在所有情况下都有效。我很难调试哪些案例失败了。

非常感谢我可以获得的所有提示!

1 个答案:

答案 0 :(得分:0)

根据您在评论中的说明,我建议您使用content scriptsmessage 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后,您可以调用后台页面并询问扩展名是否应捕获页面内容(使用消息传递)。如果是 - 如上所述,如果不是,则不做任何事。

这是做你需要的最简单,最方便的方法。