Chrome扩展没有关闭

Chrome extension not turning off

本文关键字:扩展 Chrome      更新时间:2023-09-26

我目前正在创建一个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

我是初学者

您正在添加侦听器,并且没有对删除做任何操作。

这里有两个可能的路径:

  1. 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,但这是理论

  2. 修改监听器(并且只添加一次 !)以考虑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"});
      }
    });           
    
    该方法

    更容易