繁体   English   中英

chrome webRequest onBeforeRequest事件侦听器不会触发,直到在页面上打开弹出窗口

[英]chrome webRequest onBeforeRequest event listener not firing until popup has been opened on the page

我正在为扩展程序进行测试。 我希望扩展程序在发出任何Web请求时更新徽章,但是徽章只有在我打开弹出窗口后才开始更新。 有人可以解释为什么吗?

的manifest.json

{
"manifest_version": 2,
"name": "Ad-scan",
"version": "0.1",
"content_scripts": [
{
"js": ["inject.js"],
"matches": ["<all_urls>"],
"run_at": "document_start",
"all_frames": true
}
],
"permissions": ["activeTab","declarativeContent","webRequest","webNavigation"],
"browser_action": {
"default_popup": "popup.html"
},
"background": {
"scripts": ["background.js"],
"persistent": true
}
}

background.js

chrome.webRequest.onBeforeRequest.addListener(function(details) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
    chrome.tabs.sendMessage(tabs[0].id, {toInjected: details.url}, function(response){
        chrome.runtime.sendMessage({webReqUpd: response.totalAds}) //ads are sent to popup
        chrome.browserAction.setBadgeText({text: response.totalAds.toString()}) //badge is updated  
    })
})},{urls: ["<all_urls>"]});

inject.js

var ads = 0;
var adURLs = [];
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
ads = ads + 1 //ads value is updated
adURLs.push(request.toInjected) //array is updated
console.log(adURLs) //webRequests made on page are logged to console
//logging webRequests array to console to test webRequest event
sendResponse({totalAds: ads})//sending all ads to background
})

我忽略了必须在webRequest API的权限中指定主机网络。 我在清单中添加了https和http的权限,现在可以使用了。

"permissions": ["activeTab","declarativeContent","webRequest","https://*/*","http://*/*"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM