采摘jQuery的1.9或2.0使用JavaScript和Require.JS(picking jQ

2019-08-17 07:05发布

jQuery的2.0是日益成熟: http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/

jQuery的2.0打破了旧的浏览器兼容性,因此我们必须知道什么时候留下来与jQuery 1.9。 推荐的方法是使用IE的条件注释:

<!--[if lt IE 9]>
    <script src="jquery-1.9.1.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0b2.js"></script>
<!--<![endif]-->
  • 当前web开发的最佳实践表明,我们应该避免浏览器嗅探或用户代理字符串解析,但不是这种什么条件的意见是?

  • 不jQuery的2.0只有突破与旧的Internet Explorer的兼容性? 还是有其他的浏览器,这将是更糟糕的2.0?

  • 如果这影响的不仅仅是互联网浏览器(这是唯一的地方条件注释工作)更多,我们应该用那么什么策略,选择最佳的jQuery?

  • 是有一个全局可访问的值/对象/功能/等,在JavaScript环境其存在可被用于用信号通知与jQuery 2.0兼容性(例如,特征检测)?

劳工问题

我的项目目前使用Require.JS到modularise我的代码。 我的代码目前加载jQuery的,只有当它遇到需要它的第一部分。

什么是加载使用jQuery的Require.JS的正确版本的最好方法?

我目前正在考虑:

  • 使用IE条件注释之前予加载Require.JS,然后在“定义” jQuery的手动事后

  • 在其设定Require.JS的路径(任何需要的jQuery的前)的代码使用JS特征检测设定路径到1.9或2.0酌情(我的优选方法)

  • 始终使用1.9无论什么(最安全和最无聊的办法)

Answer 1:

niaccurshi的回答AMD规范的适应。

// Do this before your first use of jQuery.

var pathToJQuery
if('querySelector' in document
    && 'localStorage' in window
    && 'addEventListener' in window) {
    pathToJQuery = '//cdn/jQuery2.0'
} else {
    pathToJQuery = '//cdn/jQuery1.9'
}

require.configure({'paths':{
    'jquery': pathToJQuery
}})

require(['jquery'], function($){ /* you get the one you need here */ })


Answer 2:

其实还有一个更优雅的解决方案,它正在使用BBC为他们的响应新闻网站。

它本质上检测被认为是浏览器的new ,因此,将与兼容jQuery 2.0+ ,因此留下的一切作为一个old的浏览器。 您可能能够复制这种Require.js ,但现实是,你不需要......

if(querySelector in document
    && localStorage in window
    && addEventListener in window) {
    //Add jQuery 2.0+
} else {
    //Add jQuery 1.9.0+
}

//This is intended to be a flag that can be checked against to see if the jQuery library has been loaded into the browser.
var jQueryVersion = 0;
function jQueryRunning(ver) {
    //This could be "true", or could be a version number, it's largely down to your own system needs!
    jQueryVersion = ver;
}

来源: 链接

您应该添加一个回调函数到每个脚本的jQuery ,这就要求jQueryRunning与参数等于它的版本号,这可以帮助你决定进一步的功能,跑下来就行了,有让你知道的好处时, jQuery代码已经被嵌入(just in case the connection is slow and it takes a while to download)

如果使用Require.js这可能不是你想关注的东西!

我说这是一个完美的解决方案,因为你说的很对,这个问题是不是只有老版本的IE ,这也是老版本的Firefox (before 3.5) ,老的移动浏览器(如果他们甚至用JavaScript处理!)



文章来源: picking jQuery 1.9 or 2.0 using JavaScript and Require.JS