我目前正在创建一个 chrome 扩展,如果有人在 chrome 中输入特定的网址,它会重定向用户并添加参数。
一切都按预期工作,除了扩展程序在关闭后仍在执行重定向(通过图标切换时)。
我的代码有什么问题?
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"
]
}
背景.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"});
}
});
非常感谢
PS:我是初学者...
最佳答案
您正在添加一个监听器,并且不执行任何操作删除它。
这里有两条可能的路径:
删除
onClicked
中的监听器处理程序时toggle === false
: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"}); } });
此方法容易得多。
关于javascript - Chrome 扩展程序未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23844098/