Javascript 需要帮助切换google chrome扩展webRequest侦听器吗
嘿,伙计们,我对谷歌chrome的扩展真的很陌生。我决定做的第一个扩展是一个简单的网站拦截器。我从某人的回答中找到了一些代码,可以根据tab.id切换webRequest侦听器,如下所示:Javascript 需要帮助切换google chrome扩展webRequest侦听器吗,javascript,google-chrome,google-chrome-extension,webrequest,Javascript,Google Chrome,Google Chrome Extension,Webrequest,嘿,伙计们,我对谷歌chrome的扩展真的很陌生。我决定做的第一个扩展是一个简单的网站拦截器。我从某人的回答中找到了一些代码,可以根据tab.id切换webRequest侦听器,如下所示: chrome.browserAction.onClicked.addListener(function(tab) { if (listeners[tab.id]) { //If the ID already exists chrome.webRequest.onBeforeRequest.remove
chrome.browserAction.onClicked.addListener(function(tab) {
if (listeners[tab.id]) { //If the ID already exists
chrome.webRequest.onBeforeRequest.removeListener(listeners[tab.id]);
delete listeners[tab.id];
chrome.browserAction.setBadgeText({
text: 'OFF',
tabId: tab.id
});
} else {
listeners[tab.id] = function(details) {
return {cancel: true};
};
chrome.webRequest.onBeforeRequest.addListener(listeners[tab.id], {
urls: user,
types: ['main_frame', 'sub_frame'],
tabId: tab.id
}, ['blocking']);
// Show indicator to show that the extension is active.
chrome.browserAction.setBadgeText({
text: 'ON',
tabId: tab.id
});
}
});
这对每个选项卡都很有效,但是我想切换所有选项卡的侦听器。
我希望它如何工作:
- 单击扩展图标
- 阻止“用户”数组中的所有URL,无论是否切换选项卡
- 无论选项卡是否与我最初启用扩展的选项卡不同,都可以再次单击图标以禁用
chrome.browserAction.onClicked.addListener(function(tab){
if(toggle===true)
toggle = false;
else if(toggle===false)
toggle = true;
if(toggle===true){
chrome.webRequest.onBeforeRequest.addListener(
function deny(request) {
return {cancel: true};
}, { urls: user, types: [] }, ["blocking"]);
chrome.browserAction.setBadgeText({
text: 'ON'
});
}
else{
chrome.webRequest.onBeforeRequest.removeListener();
chrome.browserAction.setBadgeText({
text: 'OFF'
});
}
});
基本上,我想得到一些帮助,将第一个代码段转换成一个适用于所有选项卡的代码段。谢谢!:) 您已成功识别问题:如果回调函数是匿名的,则无法删除侦听器。伟大的这是因为您需要将完全相同的对象传递给
addListener
和removeListener
那么,您所要做的就是,不要使用匿名函数,而是将该函数放在您可以访问它的地方。例如,您可以在单击的侦听器外部定义函数deny
,然后将deny
传递给onBeforeRequest.addListener
和onBeforeRequest.RemovelListener
(关于代码的注意事项:您可以使用toggle=!toggle
来翻转toggle的值,并使用if(toggle)
而不是if(toggle==true)
来测试toggle是否为true。这些只是常见的习惯用法。)