检测即浏览器的新方法,它可靠吗?

时间:2015-09-02 15:18:55

标签: javascript internet-explorer browser-detection

我听说浏览器嗅探很糟糕,我看到以下用于检测浏览器是否为IE的方法:

var isIe = !!window.ActiveXObject,

它是一种可靠的检测方法吗?

我在插件中使用过这种方法,例如 HERE

1 个答案:

答案 0 :(得分:1)

除了非常罕见的情况(通常处理功能检测不实用的实现错误)之外,根据浏览器的品牌或版本做出编程决策被认为是一种糟糕的做法,导致代码随着浏览器的变化而中断。

创建类似isIE的变量,然后将其用于编程决策,假设所有isIE true false.addEventListener()的浏览器都具有相同的行为这正是浏览器检测失败的地方。这是错的。

例如,IE8不支持.attachEvent(),但IE9及更高版本支持if (isIE) { elem.attachEvent(...); } else { elem.addEventListener(...); } 。然后在IE11中删除了.addEventListener()

所以,如果不久前,您使用浏览器检测并编写如下代码:

.attachEvent()

然后,当IE开始在IE9中支持if (elem.addEventListener) { elem.addEventListener(...); } else { elem.attachEvent(...); } 时,您的代码将继续使用旧方法。然后,当IE11在移除#时出现时,您的代码将完全中断,因为您仍然在检测IE并尝试使用旧方法。因此,您的代码很脆弱,因为它假设检测浏览器类型意味着特定的行为,这根本就不是真的。相反,您应该检测行为本身,而不是浏览器的类型。

所以,使用特征检测:

});

然后,您的代码只是继续在IE8,IE9,IE10,IE11等中继续工作......您的代码不必在浏览器更改时“修复”。