Skip to content

Instantly share code, notes, and snippets.

@nfroidure
Forked from eirikbacker/addEventListener-polyfill.js
Last active December 18, 2015 01:29
Show Gist options
  • Save nfroidure/5704413 to your computer and use it in GitHub Desktop.
Save nfroidure/5704413 to your computer and use it in GitHub Desktop.
//addEventListener polyfill 1.0 / Eirik Backer / MIT Licence
(function(win, doc){
if(win.addEventListener)return; //No need to polyfill
function docHijack(p){ doc[p]=(function(old){ return function(v){return addListen(old(v))}; })(doc[p]);}
function addEvent(on, fn, self){
return (self = this).attachEvent('on' + on, function(e){
var e = e || win.event;
e.preventDefault = e.preventDefault || function(){e.returnValue = false}
e.stopPropagation = e.stopPropagation || function(){e.cancelBubble = true}
e.currentTarget = e.currentTarget || e.srcElement;
fn.call(self, e);
});
}
function addListen(obj, i){
if(i = obj.length)while(i--)obj[i].addEventListener = addEvent;
else obj.addEventListener = addEvent;
return obj;
}
addListen([doc, win]);
if('Element' in win)win.Element.prototype.addEventListener = addEvent; //IE8
else{ //IE < 8
doc.attachEvent('onreadystatechange', function(){addListen(doc.all)}); //Make sure we also init at domReady
docHijack('getElementsByTagName');
docHijack('getElementById');
docHijack('createElement');
addListen(doc.all);
}
})(window, document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment