我知道没有办法做到这一点,但有一种方法可以专门针对我的任务。我希望在内容脚本中尽快执行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对标签做一些事情,以便内容脚本知道它以避免消息传递?
答案 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
我所做的是从内容脚本发送XMLHttpRequest
到window.location.href
然后我在后台html中捕获该请求并检查它的url,如果它是发送它的选项卡的url匹配url,我要么取消请求,要么让它运行。
通过这种方式,内容脚本可以定义在后台发生的事情,因为取消了请求
返回-1
。