【问题标题】:IE version Without conditional comments in javascriptIE 版 javascript 中没有条件注释
【发布时间】:2014-06-21 19:43:34
【问题描述】:

我知道如何使用conditional comments 测试ie 版本。但是,我发现了一种很好且干净的方法,通过测试 javascript 方法并检查它是否受支持,例如:

if(  document.addEventListener  ){
    alert("you got IE9 or greater");
}

但是,如果它是特定版本,我不知道如何测试它(例如,如果它是 IE8,我想做一些事情,但如果它是 IE7 则不是或 IE9 或其他版本。

我可以使用James Panolsey's solution

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

但它确实使用条件注释进行测试。


为什么不用条件评论?因为Standards mode。正如 Microsoft 在其 websitedev center 中所述,他们确实在其新版本中支持它:

重要 从 Internet Explorer 10 开始,条件 cmets 不再 标准模式支持的时间更长。使用特征检测提供 网站功能的有效后备策略 浏览器支持。有关标准模式的详细信息,请参阅 定义文档兼容性。


通过有效方法测试在我的 POV 中更有效,但我不知道如何以特定版本的方式进行测试......(“使用 this 你可以测试那个版本”)。我唯一知道的是上面我用作示例的那个。还有其他方法可以用来测试吗?还是不行?

【问题讨论】:

  • 如果您只需要测试确实 支持条件 cmets 的特定版本,并忽略所有较新的版本,那么您可以使用条件 cmets。否则,只需使用 addEventListener 示例中的特征检测即可。
  • 测试不同的东西,比如画布
  • @BoltClock 我需要测试它是否是一个函数,如果它是 ie >= 11 对于其他函数。当开始支持某些方法时,我只是不知道在哪里可以找到。所以我可以用它们来测试特定的功能。我只知道addEventListener atm。 @pc-shooter 说要测试画布,例如,这是一个很好的,但我想要更多,不知道在哪里看。
  • @MichelAyres - 寻找您需要的实际功能。不要试图根据某事或其他事的真实性来猜测浏览器。这是过去 10 年网络社区一直在摆脱的脆弱混乱。

标签: javascript jquery internet-explorer browser browser-detection


【解决方案1】:

虽然功能检测非常有用,有时是区分支持和不支持浏览器版本的最快方法,但检测 IE 及其版本实际上是小菜一碟:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;
var htmlTag = document.documentElement;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8; strictly IE proprietary 
    browser = 'IE';
    ieVersion = document.documentMode;
}

// Using it can be done like this: 
if (browser == 'IE' && ieVersion == 11)
    htmlTag.className += ' ie11';

.
这就是你所需要的。您还可以使用此脚本在较低的模式/视图中捕获较高的 IE,包括兼容性 ~。

【讨论】:

  • 虽然这可能会有所帮助,但您应该再强调一点,这实际上并不会检测浏览器 version,而只是检测浏览器 mode .这可能是人们想要的——但也可能不是。 (例如,也许他们想告诉人们,“嘿;你在 IE9 模式下,但你有 IE11!”)
  • @AndrewBarber:这本身就是真的。但我认为 OP 的目标比这更复杂。
  • 我也希望如此;但以防万一 - 以及通过谷歌找到这个的其他人;只是为了让(可能很小的)差异为人所知。不过,这绝对是检测 documentMode 的 方法。与以前的版本相比,它的脆弱和怪异要少得多。
  • @AndrewBarber:实际上,我认为无法从模式/视图中分辨 IE 版本。 IE8模式下的IE11携带/发送IE8的uA。原始的 IE8 uA,没有任何“标记”表明它实际上是 IE8 模式/视图中的 IE11。
  • 正确;你不能。这就是为什么我建议添加说明。 :)
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 2023-03-06
  • 2011-02-04
  • 2012-02-24
  • 2012-05-23
  • 2011-10-30
  • 1970-01-01
  • 2012-04-26
相关资源
最近更新 更多