Search code examples
google-chrome-extension

Unable to add event listener to webNavigation.onCompleted


Using the mock function below along with the dev console:

This call will work:

chrome.webNavigation.onCompleted.addListener(processWebNavChange, filtera);

but when I actually pass in my real var filter it throws this error: Uncaught TypeError: Could not add listener

My actual data looks like this:

{
    url: [ {hostContains: ".im88rmbOwZ"} ]
}
function registerWebNavListener() {
    var matchers = getUrlMatchers();
    var filter = {
        url: matchers
    };
    // test with mock data filtera that actually works
    const filtera = {
      url:
      [
        {hostContains: "example.com"},
      ]
    }
    if (matchers.length > 0) {
        chrome.webNavigation.onCompleted.addListener(processWebNavChange, filtera);
    }
}

async function processWebNavChange(data) {
}

Is there something wrong with my data structure that I'm actually using? I don't believe that the filter object I returned is incorrect }

EDIT: I added a new

const filterb = {
        url: [ {hostContains: ".im88rmbOwZ"} ]
    };

and it still fails with that. The single entry {hostContains: ".im88rmbOwZ"}, was the first item returned from getURLMatchers() which I used as an example of real data being returned.


Solution

  • The above comment on the upper-case letters was the cause of the issue. Converting everything to lowercase resolved the problem.

    Although, I am not clear as to why that was a problem to begin with. (If there are any hints in the chromium source code event filter handlers, I'd appreciate it if it could be pointed out).