That is, if you do not specify the runAt property in chrome.tabs.executeScript it defaults to document_idle. document_idle occurs after the DOM load event, so your code attaches the event listener too late.
To fix this, set runAt to document_start. This works for me:
If load hasn’t fired yet it should in the future. I was saying that load had already fired by the time the script was executed, not that it had not fired yet.
It does, if the permission to access “https://mozilla.org” is not specified in the package.json.
You’re right. I was assuming that he had host permissions for it in his manifest. If you don’t check for lastError though you should get a warning in your console about not checking it. I assumed that the OP checked for console errors.