removeEventListener()的问题没有删除事件,在Chrome扩展下进行测试

时间:2014-09-10 09:05:38

标签: javascript google-chrome google-chrome-extension dom-events

我正在调用以下方法来设置然后从我的Google Chrome扩展程序的内容脚本中删除DOM元素上的input事件侦听器:

//From the global scope
gl = {
setEventIfNotDoneAlready: function(elmt)
{
    if(elmt.doneAlready)
        return true;

    if(!elmt.myEventSet)
    {
        elmt.addEventListener('input', gl.onMyInputEvent, true);

        elmt.myEventSet = true;
    }

    return false;
},

onMyInputEvent: function(elmt)
{
    elmt.target.doneAlready = true;

    elmt.target.removeEventListener('input', gl.onMyInputEvent, true);

    console.log(">>Input fired!");
}

};

然后调用上面的方法:

var objAll = document.getElementsByTagName("*");
for(var i = 0; i < objAll.length; i++)
{
    if(objAll[i].isContentEditable)
    {
        if(gl.setEventIfNotDoneAlready(objAll[i]))
        {
            //And so on...
        }
    }
}

我需要指出的是,上面的代码会被注入Chrome浏览器用户导航到的任意页面。 (这是通过Chrome扩展程序完成的。)

这种方法似乎在大多数页面上都能正常工作,除了在某些情况下removeEventListener没有做任何事情,我的onMyInputEvent继续被调用,就好像什么也没做。

知道为什么吗?

0 个答案:

没有答案