EDITAR
me escribió un fragmento que emulan la interfaz EventListener y el IE8 uno, es exigible incluso en objetos lisos: https://github.com/antcolag/iEventListener/blob/master/iEventListener.js
vieja respuesta
esta es una manera de addEventListener emular o attachEvent en navegadores que no son compatibles con uno de esos
esperanza ayudará
(function (w,d) { //
var
nc = "", nu = "", nr = "", t,
a = "addEventListener",
n = a in w,
c = (nc = "Event")+(n?(nc+= "", "Listener") : (nc+="Listener","")),
u = n?(nu = "attach", "add"):(nu = "add","attach"),
r = n?(nr = "detach","remove"):(nr = "remove","detach")
/*
* the evtf function, when invoked, return "attach" or "detach" "Event" functions if we are on a new browser, otherwise add "add" or "remove" "EventListener"
*/
function evtf(whoe){return function(evnt,func,capt){return this[whoe]((n?((t = evnt.split("on"))[1] || t[0]) : ("on"+evnt)),func, (!n && capt? (whoe.indexOf("detach") < 0 ? this.setCapture() : this.removeCapture()) : capt ))}}
w[nu + nc] = Element.prototype[nu + nc] = document[nu + nc] = evtf(u+c) // (add | attach)Event[Listener]
w[nr + nc] = Element.prototype[nr + nc] = document[nr + nc] = evtf(r+c) // (remove | detach)Event[Listener]
})(window, document)
Si un navegador implementa un prototipo de esquema de herencia para sus objetos DOM no es relevante si es compatible con W3C [EventTarget interface] (http://www.w3.org/TR/DOM-Level-2-Events/events .html # Events-EventTarget-addEventListener). Si desea probar el soporte, pruébelo directamente: 'if (element.addEventListener) {/ * supported * /} else {/ * not supported * /}' es efectivo en todos los navegadores y es independiente de la implementación. – RobG