IE10不再支持浏览器检测标记来识别浏览器 .
为了检测IE10,我使用JavaScript和功能测试技术来检测某些 ms
前缀样式,例如 msTouchAction
和 msWrapFlow
.
我想对IE11做同样的事情,但我假设所有的IE10样式也将在IE11中得到支持 . 任何人都可以帮我识别IE11中唯一可以用来分辨两者的风格或功能吗?
Extra Info
-
我不太喜欢,可以改变,我认为我是Internet Explorer .
-
有关IE10功能测试如何工作的示例,我使用JsFiddle(不是我的)作为测试的基础 .
-
我也期待很多"This is a bad idea..."的答案 . 我对此的需求之一是IE10声称它支持某些东西,但实现得非常糟糕,我希望能够区分IE10和IE11,以便将来继续使用基于功能的检测方法 .
-
此测试与Modernizr测试相结合,该测试只会使一些功能"fallback"成为不那么迷人的行为 . 我们不是在谈论关键功能 .
ALSO I am already using Modernizr, but it doesn't help here. I need help for a solution to my clearly asked question please.
17 回答
如果您正在使用Modernizr - 那么您可以轻松区分IE10和IE11 .
IE10不支持
pointer-events
属性 . IE11确实如此 . (caniuse)现在,基于Modernizr插入的类,您可以拥有以下CSS:
根据不断发展的主题,我更新了以下内容:
IE 6
要么
IE 7
要么
IE 6和7
要么
要么
IE 6,7和8
IE 8
要么
IE 8仅限标准模式
IE 8,9和10
仅
IE 9
IE 9及以上
IE 9和10
仅
IE 10
IE 10及以上
要么
使用
-ms-high-contrast
意味着MS Edge不会被定位,as Edge does not support -ms-high-contrast .IE 11
Javascript替代品
Modernizr
用户代理选择
使用Javascript:
将以下内容添加到
html
元素:允许非常有针对性的CSS选择器,例如:
脚注
如果可能,请确定并修复任何问题,而不是黑客攻击 . 支持progressive enhancement和graceful degradation . 然而,这是一个并不总是可以获得的场景,因此上述应该有助于提供一些好的选择 .
归因/基本阅读
Jeff Clayton | Browserhacks.com
Keith Clarke
Paul Irish
Web Devout
The Spanner
所以我最终找到了解决这个问题的方法 .
搜索Microsoft documentation后,我设法找到了一个新的IE11样式
msTextCombineHorizontal
在我的测试中,我检查IE10样式,如果它们是正面匹配,那么我检查IE11的样式 . 如果我找到它,那么它是IE11,如果我没有,那么它是IE10 .
Code Example: Detect IE10 and IE11 by CSS Capability Testing (JSFiddle)
当我发现它们时,我会用更多样式更新代码示例 .
注意:这几乎肯定会将IE12和IE13识别为“IE11”,因为这些样式可能会发扬光大 . 随着新版本的推出,我将进一步增加测试,希望能够再次依赖Modernizr .
我正在使用此测试进行回退行为 . 后备行为只是不那么迷人的样式,它没有减少功能 .
添加所有类或CSS属性 .
这似乎有效:
https://www.limecanvas.com/css-hacks-for-targeting-ie-10-and-above/
您可以正常编写IE11代码,然后使用
@supports
并检查IE11中不支持的属性,例如grid-area: auto
.然后,您可以在其中编写现代浏览器样式 . IE不支持
@supports
规则并将使用原始样式,而这些将在支持@supports
的现代浏览器中被覆盖 .这对我有用
然后在css文件中加上前缀的东西
这个浏览器何时准备好死?
看看这篇文章:CSS: User Agent Selectors
基本上,当您使用此脚本时:
您现在可以使用CSS来定位任何浏览器/版本 .
因此,对于IE11,我们可以这样做:
FIDDLE
试试这个:
这是2017年的答案,你可能只关心区分<= IE11和> IE11(“Edge”):
更多示范例:
这是有效的,因为IE11实际上甚至不支持
@supports
和all other relevant browser/version combinations .IE11支持但IE11不支持的某些
-ms-foo
专有属性也可能存在,在这种情况下,您可以使用@supports (--what: evr) { }
直接单独使用IE11而不是使用上述覆盖 .你应该使用Modernizr,它会在body标签中添加一个类 .
也:
请注意,IE11仍处于预览状态,用户代理可能会在发布前更改 .
IE 11的User-agent字符串当前是这样的:
这意味着您可以简单地测试版本11.xx,
也许Layout Engine v0.7.0可以很好地解决您的问题 . 它使用浏览器功能检测,不仅可以检测IE11和IE10,还可以检测IE9,IE8和IE7 . 它还可以检测其他流行的浏览器,包括一些移动浏览器它为html标签添加了一个类,易于使用,并且在一些相当深入的测试中表现良好 .
http://mattstow.com/layout-engine.html
您可以使用js并在html中添加一个类来维护conditional comments的标准:
或者像bowser一样使用lib:
https://github.com/ded/bowser
或用于特征检测的现代化:
http://modernizr.com/
使用以下属性:
!! window.MSInputMethodContext
!! document.msFullscreenEnabled
检测IE及其版本实际上非常简单,至少非常直观:
.
这样,你也在兼容模式/视图中捕获高IE版本 . 接下来,它是分配条件类的问题:
你可以试试这个:
退一步:为什么你甚至试图检测“互联网浏览器”而不是“我的网站需要做X,这个浏览器是否支持该功能?如果是,那么好的浏览器 . 如果没有,那么我应该警告用户” .
你应该点击http://modernizr.com/而不是继续你正在做的事情 .