removeListener Chrome扩展程序无效

时间:2017-10-21 19:34:13

标签: google-chrome-extension

以下是background.js的内容:

var toggle = false;
chrome.browserAction.onClicked.addListener(function(tab) {
  toggle = !toggle;
  if(toggle) {
    var start_working = function() {
                            chrome.tabs.query({ url: ["http://*/*","https://*/*"], currentWindow: true }, function (tabs) {
                                 for (var i = 0; i < tabs.length; i++) {   
                                    chrome.tabs.executeScript(tabs[i].id, {code : "var enabled = 1;"});
                                    chrome.tabs.executeScript(tabs[i].id, {file: 'js/new.js'});
                                    chrome.browserAction.setIcon({path: "add48.png", tabId:tabs[i].id});
                                 }
                            });
                        }
    if (!chrome.tabs.onUpdated.hasListener(start_working)) {
        chrome.tabs.onUpdated.addListener(start_working);
        chrome.tabs.query({url: ["http://*/*","https://*/*"]}, function (tabs) {
                console.log('1start_working='+chrome.tabs.onUpdated.hasListener(start_working));
                console.log('1toggle='+toggle);
                for (var i = 0; i < tabs.length; i++) {
                    chrome.tabs.executeScript(tabs[i].id, {code : "var enabled = 1;"});
                    chrome.tabs.executeScript(tabs[i].id, {file: 'js/new.js'});
                    chrome.browserAction.setIcon({path: "add48.png", tabId:tabs[i].id});
                }
            }
        );
    }
  } else {
    chrome.tabs.onUpdated.removeListener(start_working);
    console.log('2start_working='+chrome.tabs.onUpdated.hasListener(start_working));
    console.log('2toggle='+toggle);
    chrome.tabs.query({url: ["http://*/*","https://*/*"], currentWindow: true }, function (tabs) {
            for (var i = 0; i < tabs.length; i++) {
                chrome.tabs.executeScript(tabs[i].id, {code : "var enabled = 0; $('#sort_g').remove();"});
                chrome.browserAction.setIcon({path: "add48_off.png", tabId:tabs[i].id});
            }
        }
    );
    return false;
  }
});

这是manifest.json的代码:

{
  "manifest_version": 2,
  "name": "Ds",
  "version": "0.2",
  "background": {
    "scripts": ["background.js"]
  },
  "icons": { 
    "48": "add48.png",
    "128": "add128.png"
  },
  "browser_action": {
    "default_icon": "add48_off.png"
  },
  "permissions": [
        "tabs",
        "notifications",
        "*://*/*"
  ],
  "content_scripts": [
      {
        "matches": ["<all_urls>"],
        "js": ["js/jquery-2.2.4.min.js"],
        "run_at": "document_end",
        "all_frames": true
      }
  ],
  "web_accessible_resources": ["tpl/panel.html"]
}

当我们点击应用程序图标时,我们向所有HTML标签添加一个元素并使图标“活动”,当我们再次单击该图标时,我们将图标更改为灰色并从所有页面中删除html元素

此外,更新html标签时,该元素应再次出现,扩展图标应处于活动状态。

所有这些都已实现,但在禁用扩展后,仍然会出现html元素,但不应连接new.js脚本并且chrome.tabs.onUpdated.hasListener(start_working)=false

这是禁用扩展程序后的日志:

background.js:49 2start_working=false background.js:50 2toggle=false

但无论如何更新标签时,页面上会出现html元素

我无法理解为什么会这样?此外,控制台显示禁用扩展后,更新页面时,new.js脚本已连接3次。

0 个答案:

没有答案