2016-09-01 48 views
0

我有这样的javascript代码:如何检测document.addEventListener支持在JavaScript

initializeEventHandlers: function() { 
     if (typeof document.implementation != "undefined" && 
     document.implementation.hasFeature("HTML", "1.0") && 
     document.implementation.hasFeature("Events", "2.0") && 
     document.implementation.hasFeature("CSS", "2.0")) { 
     document.addEventListener("mouseup", this._mouseUpHandler.bindAsEventListener(this), false); 
     document.addEventListener("mousemove", this._mouseMoveHandler.bindAsEventListener(this), false); 
     } 
     else { 
     document.attachEvent("onmouseup", this._mouseUpHandler.bindAsEventListener(this)); 
     document.attachEvent("onmousemove", this._mouseMoveHandler.bindAsEventListener(this)); 
     } 
    } 

,在大多数浏览器上运行,但是当我使用IE11失败。我知道这是因为IE11移除了对attachEvent的支持,并且IE11落入了else条件。我也看到hasFeature已被弃用,所以我不知道如何最好地检测addEventListner支持。

+0

什么是您必须支持的最古老的浏览器? –

+0

注意:document.implementation.hasFeature已弃用,并且在很多情况下始终返回true:p –

回答

1

以下代码适用于IE11和Firefox,但是它适用于其他/旧版浏览器吗?

initializeEventHandlers: function() { 
     if (document.addEventListener) { 
     document.addEventListener("mouseup", this._mouseUpHandler.bindAsEventListener(this), false); 
     document.addEventListener("mousemove", this._mouseMoveHandler.bindAsEventListener(this), false); 
     } 
     else if (document.attachEvent) { 
     document.attachEvent("onmouseup", this._mouseUpHandler.bindAsEventListener(this)); 
     document.attachEvent("onmousemove", this._mouseMoveHandler.bindAsEventListener(this)); 
     } 
    } 
+0

https://gist.github.com/eirikbacker/2864711/946225eb3822c203e8d6218095d888aac5e1748e https://github.com/termi/ES5-DOM- SHIM/ – Tschallacka

+0

这是检查这种情况的典型方法(注意,首先检查addEventListener是否符合标准,然后是旧IE特定情况)。它应该基本上在所有的浏览器上运行,除了二十年前的浏览器。 –