问题
限制
代码
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// Prevent double firing of event - extension should run once on complete.
if (changeInfo.status == "complete") {
chrome.webRequest.onCompleted.addListener(
function(details) {
console.log(details);
// Pseudo code, where things are pulled from storage
// Based on this I then:
executeScript(tabId, "built_seo_traffic.js");
},
{
urls: ["*://*/*"],
types: ["main_frame"],
tabId: tab.id
},
["responseHeaders"]
);
}
});
我尝试了什么
我已经尝试设置一个变量来检查事件是否已经被触发,但是我只能这样做,所以脚本然后在所有选项卡上运行一次,而不是在每个选项卡上运行一次。
我是否正确处理了这个问题?我只是遗漏了让事情变得简单的事情?
答案 0 :(得分:0)
感谢@wOxxOm,我设法得到了以下解决方案:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// Prevent double firing of event - extension should run once on complete.
if (changeInfo.status == "complete") {
chrome.webRequest.onCompleted.addListener(
executeTrafficLights,
{
urls: ["*://*/*"],
types: ["main_frame"],
tabId: tab.id
},
["responseHeaders"]
);
}
});
executeTrafficLights(details){
console.log(details);
// Pseudo code, where things are pulled from storage
// Based on this I then:
executeScript(tabId, "built_seo_traffic.js");
// Then remove self after executing
chrome.webRequest.onCompleted.removeListener(executeTrafficLights);
}
值得注意的是,我一直在努力的部分是因为命名函数只能在没有参数的情况下调用,所以我不知道如何传入tabId和tab。
将我需要的信息(tabId和URL)都显示在详细信息对象中。
不确定tab
中是否包含details
中没有的任何其他信息,但对我而言,这种信息效果很好!