【发布时间】:2012-08-24 13:24:25
【问题描述】:
我已经对特定功能进行了功能检测,以确定是否可以使用它或是否必须使用变通方法。但是,不幸的是,我发现 IE 在该功能中有一些错误,即使它存在,它也对我毫无用处。所以,即使它通过了功能检测,我也需要检测浏览器是 IE,所以如果它是 IE,我不会使用该功能。
我试图看看我是否可以对实际的错误行为进行功能检测(这是最好的,因为如果 IE 将来修复该行为,它会适应),但似乎没有任何方法可以做那个(different question 的主题)。这意味着我只能试图最终确定它是一个 IE 浏览器,这样我就可以避免这个错误的功能。 我不想使用 useragent 字符串,因为我们都知道它很容易被欺骗并且很容易出错。
所以,我想对是否是IE浏览器进行特征检测。
到目前为止我的方法是这样的:
var isIE = (document.body.attachEvent && window.ActiveXObject);
这将查看是否存在 attachEvent() 方法以及是否存在 ActiveXObject 支持。我必须做的不仅仅是检查attachEvent,因为Opera 支持attachEvent。
这是检测 IE 的可靠方法吗?有更好的方法吗?
请不要回复我真的不应该做浏览器检测,而是应该使用特征检测。我已经在进行功能检测,但这导致了一个问题,因为“支持”该功能并因此通过功能检测的浏览器结果非常错误,以至于我无法在该浏览器中使用该功能。所以,现在我必须检测有问题的浏览器。
如果你想了解更多关于这个使用的具体情况,在this other question中有描述。
【问题讨论】:
-
我明白你所说的特征检测不起作用,但实际上你只是检测到错误的特征。从长远来看,测试 IE 破坏该功能的任何方面可能会更具可持续性;换句话说,做这件事,看看它是否像 IE 通常那样把它搞砸了,如果是这样,你的特殊 IE 代码就搞砸了。如果你这样做,那么每当未来版本的 IE 修复错误时,你的代码都会自动做正确的事情;使用浏览器检测,您将来必须再次更新代码。
-
@machineghost - 有时无法衡量行为是否正常执行或是否包含错误。我在这里遇到的具体情况与我的问题中提到的how IE handles certain input events 有关。如果可以设计一个功能测试,我会很乐意使用,但我无法设计一个有效的,我在 SO 上问了一个问题,没有帮助设计一个,因此觉得我别无选择,只能检测有问题的浏览器而是。
标签: javascript cross-browser browser-feature-detection