内容脚本和background.html之间的同步回调

时间:2011-07-05 08:56:17

标签: javascript google-chrome-extension

我知道没有办法做到这一点,但有一种方法可以专门针对我的任务。我希望在内容脚本中尽快执行window.stop()命令,以便在我打开超过30个标签时加速谷歌浏览器启动。通常我会从内容脚本向background.html发送请求,以查找当前选项卡是否处于非活动状态,等待响应然后执行window.stop()。但这是一个坏主意,因为当同时加载30个标签时,响应响应需要很长时间。因此,我需要一个syncronus回调来在内容脚本激活后立即停止页面。所以我提出了这个解决方案。在background.html中,我这样做

chrome.tabs.getAllInWindow(null,
function(tabs)
{ tabs.forEach(
  function(tab)
  { //check if tab is active
    //if it's not do chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected})
  })
})

我尝试了两种修改网址的方法

1:google.com => google.com //

2:google.com => google.com ???

当内容脚本检查window.location.href并找到doubleslash或tripple问号时,它会执行window.stop()

因此,当它装载时,铬让我没有时间死去:)

但这种方式并不完美。很多页面会自动纠正这样的网址。当然这很粗鲁。

所以也许还有另一种方法可以使用background.html对标签做一些事情,以便内容脚本知道它以避免消息传递?

2 个答案:

答案 0 :(得分:0)

而不是:

chrome.tabs.update(tab.id, {url: "modified_url", selected: tab.selected});

做的:

chrome.tabs.executeScript(tab.id, {code: "window.close()"});

答案 1 :(得分:0)

我发现了一种允许在内容脚本和背景html之间同步传递boolean值的方法。它涉及webRequest API 我所做的是从内容脚本发送XMLHttpRequestwindow.location.href 然后我在后台html中捕获该请求并检查它的url,如果它是发送它的选项卡的url匹配url,我要么取消请求,要么让它运行。
通过这种方式,内容脚本可以定义在后台发生的事情,因为取消了请求 返回-1