基于条件注释提供不同的jQuery版本是一个好主意吗?

时间:2013-05-21 12:33:21

标签: jquery conditional-comments

随着jQuery 2.0的发布,我想知道在使用“条件评论”为IE8和更低版本以及其他浏览器提供不同版本的jQuery时是否会出现问题:

<!DOCTYPE html>
    <head>
        <!--[if lte IE 8]>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <![endif]-->

        <!--[if gt IE 8]>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <![endif]-->

        <!--[if !IE]> -->
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
        <!-- <![endif]-->
    </head>
    <body>

    </body>
</html>

由于发行说明状态,即

  

jQuery 2.0与jQuery 1.9具有相同的API

我确实假设即使使用大量现有的jQuery代码也会采用这种方法。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

意见类型问题:

我的意见

2.0中的大多数内容与HTML5异常相同。许多“vanilla”JS函数已被jQuery样式标记所取代(这仅仅是我对代码的遵守),并且代码现在正在使用新实现的“标准”,从而使它与旧的IE不兼容。

但是,目前,名称间距是相同的。所以我的想法是,我会说它一点也不差,但是,就像以前版本的jQuery一样,不要指望HTML5浏览器(Chrome,FF,IE9 +)中的一种看起来与旧版本相同浏览器。 U可能仍然希望对可能的IE细节进行一些检查,就像以前的版本一样。这真的不是什么新鲜事。

通常情况下,覆盖jQuery标记会很好,但是你可能会注意到差别。例如,IE 7如何在某些样式上处理.animate,而不是IE 9或10处理它们。正如我之前所说,这真的不是什么新鲜事。

我个人设计了一个可以使用最新标准的视线,然后是“返回版本”以与旧版浏览器兼容。我这样做只是因为,无论我需要抛出一个“特定”,通常与其余代码相比并不多。此外,当我完成一些事情的开发时,我可能期望支持的旧版本之一可能不再是一个问题。

如果有任何帮助,MS已经宣布在未来五年左右的时间内对Vist / IE9下的所有内容进行缓慢而稳定的支持。期望看到越来越少的旧浏览器支持需求。 http://support.microsoft.com/gp/lifeadditionalproducts(白皮书中有一篇更好的文章,但它在我的电子邮件中,不确定他们的白皮书列表在哪里上线)

另一个“gotchya”我最近发现,Firefox变得更像微软。我发现他们非常想要纳入他们的“自己的标准”,并从“我”考虑标准开发的方向向相反的方向发展。这已成为越来越多的问题,因为我发现“在所有浏览器中工作(甚至IE7!),但是FIREFOX!”我没有足够的调查,看看为什么FF变化如此之大,但他们肯定成为新的“IE头痛”的发展。

一个主要的例子,标题中的CSS样式具有任何不完整性,甚至新的FF引擎不喜欢的某些CSS3标准将杀死整个页面。就在我的脑海中,我遇到的一个问题(如果我正确地记得这个问题,就在几个星期前)是我用表行和:after做的事情。 Firefox会在我的CSS和“BOOM!DOA!”中找到这一行。没有JS会起作用,在那之后没有样式可行。我改变了这一行,使用了nth-child+的组合,突然间没有FF的争论了。

我曾经喜欢FF,但随着IE终于迎头赶上,MS宣布支持“糟糕的老鲤鱼”和Mozilla切换落后(我再次认为),我会期待-mozilla-作为新的“幕后”浏览器,您必须为其制作“条件”声明。


更新[6/5/13]
在收到这篇文章的新观点后,我花了一分钟时间对它进行了审核,并认为我将与jQuery Name-Spacing共享另一个“gotchya”。我不知道为什么我之前没有提到它,除了它有点旧,我想我认为大多数人都会知道。但是,由于我最近给出的其他帮助,我发现它非常“未知”。

一个使用jQuery的旧版“gotchya”附带1.7版本。如果你查一下,你会看到,他们改变了一个主要的名称间距,后来被完全弃用了。 $.bind$.delegate$.live的名称空格被替换为更容易遵循$.on$.off的名称空间。对于开发人员而言,这当然是一个很大的痛苦,因为它需要基于版本的if语句。

同样,这只是用于在1.7 +更新版本和&gt;之间切换jQuery版本的问题。 1.7!

如果您选择在新旧jQuery之间切换,那么我建议您将委派的函数包装在命名方法中。然后可以像$(document).on("event", "element", functionName)一样调用它们。不要忘记您的命名函数的参数将是event。此外,如果您错过了解决方案而需要它(if语句),它就像下面这样简单:

if ($.fn.on) {
    /*
     * is using jQuery ver >= 1.7
     * do work as necessary using:
     * $(document).on("event", "selector", callback)
    */
}
else {
    /*
     * is using jQuery ver < 1.7
     * do work as necessary using something like:
     * $(document).live("event", "selector", callback)
    */
}