Chrome扩展没有关闭
Chrome extension not turning off
我目前正在创建一个chrome扩展,重定向用户和添加参数,如果有人在chrome中输入特定的url。
一切工作如预期,除了扩展仍然做重定向一旦它的关闭(当通过图标切换关闭)。
我的代码有什么问题?
Manifest.json
{
"name": "Country Switcher",
"description": "Redirect Google to a different host",
"version": "1.0",
"manifest_version": 2,
"browser_action": {
"default_icon": "off.png",
"default_title": "icon"
},
"background": {"scripts":["background.js"]},
"permissions": [
"webRequest",
"*://*/*",
"webRequestBlocking"
]
}
background.js
var host_fr = "https://www.google.fr";
var param_fr = "";
var toggle = false;
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path: "on.png"});
chrome.webRequest.onBeforeRequest.addListener(
function redirect(details) {
return {redirectUrl: host_fr + details.url.match(/^https?:'/'/[^'/]+(['S's]*)/)[1] + param_fr};
},
{
urls: [
"*://www.google.com/*",
],
types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
},
["blocking"]
);
}
else{
chrome.browserAction.setIcon({path: "off.png"});
}
});
THank you very much
我是初学者
您正在添加侦听器,并且没有对删除做任何操作。
这里有两个可能的路径:
-
当
时删除toggle === false
:onClicked
处理程序中的监听器function handler(details) { // Must be non-anonymous return {redirectUrl: host_fr + details.url.match(/^https?:'/'/[^'/]+(['S's]*)/)[1] + param_fr}; } chrome.browserAction.onClicked.addListener(function(tab) { toggle = !toggle; if(toggle){ chrome.browserAction.setIcon({path: "on.png"}); chrome.webRequest.onBeforeRequest.addListener( handler, /* your other parameters */ ); } else{ chrome.browserAction.setIcon({path: "off.png"}); chrome.webRequest.onBeforeRequest.removeListener(handler); } });
我不是100%确定
removeListener
如何与webRequest
工作,考虑到复杂的addListener
,但这是理论 -
修改监听器(并且只添加一次 !)以考虑
toggle
:
该方法function handler(details) { if (toggle) { return {redirectUrl: host_fr + details.url.match(/^https?:'/'/[^'/]+(['S's]*)/)[1] + param_fr}; } else { return {}; // do nothing } } // Do this at the top level chrome.webRequest.onBeforeRequest.addListener( handler, /* your other parameters */ ); chrome.browserAction.onClicked.addListener(function(tab) { toggle = !toggle; if (toggle) { chrome.browserAction.setIcon({path: "on.png"}); } else { chrome.browserAction.setIcon({path: "off.png"}); } });
更容易。
相关文章:
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 从选项页面更新chrome扩展清单权限
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- Chrome扩展:遍历不同的页面并收集数据
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- Chrome扩展:Chrome.tabs.executeScript不工作
- 中的访问扩展chrome://extensions页
- 如何在扩展Chrome DevTool时检索请求的启动器
- Chrome扩展-Chrome报警API为创建的每个新报警重新安排所有报警
- 是否有任何方法来扩展chrome's __commandLineAPI
- 谷歌Chrome扩展Chrome .tab . onupdate . addlistener
- 创建在页面上注入脚本的扩展chrome内容
- Chrome扩展:Chrome扩展中未定义的变量,即使它存在于控制台中