I've had exactly the same problem. My workaround was like so: if (!window.addEventListener('load', function() { scan(); }, true)) { scan(); } So if there's no addEventListener, the scan function just runs when GM loads the script. --Ryan