chrome扩展内容脚本removeEventListener无法正常工作

时间:2018-03-10 08:40:44

标签: javascript google-chrome-extension content-script

我是编程和Chrome扩展程序的新手。我无法从我的Google扩展程序中的内容脚本中删除事件侦听器。 AddeventListener正在运行并调用myFunc。 myFunc也被调用removeEventListener 这可能是一个微不足道的问题,但我无法弄明白。提前感谢您的帮助。

testScript.js:

chrome.storage.sync.get('isOn',function(data) {
    var isOn =data.isOn;

    console.log('TESTSCRIPT:ACTIVATED, isOn: ' +isOn);
    if(isOn){
        console.log('add Event Listener');
        document.addEventListener('mouseup',myFunc);
    }
    else{
        console.log('remove Event Listener');
        document.removeEventListener('mouseup',myFunc);
    }
});

function myFunc(){
    console.log('my func activated');   
}

Background.js:

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.storage.sync.get('isOn',function(data){
        var isOn =data.isOn;
        console.log('value of isOn' ,isOn);

        if (isOn){
            chrome.storage.sync.set({'isOn' : false},function() {
                    console.log('The isOn is set to false.');
                chrome.browserAction.setIcon({path: 'boy_off.png'});            
            });


        }
        else{
            chrome.storage.sync.set({'isOn' : true},function() {
                chrome.browserAction.setIcon({path: 'boy.png'});

            });
        }
        chrome.tabs.executeScript(null,{
                    file:'testScript.js'
                });                     
    });


});

的manifest.json

{
  "manifest_version":1,


  "name":"MyGC",
  "description":"This is chrome Extension",
  "version":"1.0",

  "browser_action":{
    "default_icon":"boy_off.png"   
  },
  "background":{
    "scripts":["background.js"]

  },
  "permissions":[

    "activeTab",
    "tabs",
    "http://*/*",
    "https://*/*",

   ],

}

1 个答案:

答案 0 :(得分:0)

函数是一个对象。每次在文档上执行脚本时,它都会将myFunc重新定义为新函数。在上一次执行中,这个新函数与旧函数不同。因此,removeEventListener(... myFunc)无法工作。

使其工作的一种方法是执行一次内容脚本,并从background.js向其发送消息,以便内容脚本仍具有myFunc值。

我没有尝试的另一种方法:在内容脚本中只定义一次myFunc。然后运行您希望调用它的另一个内容脚本多次,但不要再次定义它。