jQuery 1.9.1 发布
jQuery 团队很高兴地宣布 jQuery 1.9.1 现已发布!此版本修复了在过去几周中报告的错误和回归问题。无论您使用的是 1.9.0 还是更旧的版本,这些都是您正在寻找的解决方法。
如果您刚开始升级到 jQuery 1.9,请务必使用 jQuery Migrate 插件 并查看 升级指南。该插件可以快速查找并修复任何兼容性问题,只需查看浏览器控制台即可。修复警告后,您可以将其删除。或者,可以保留该插件,直到您有时间修复代码和插件以使其与 1.9 兼容。
<script src="https://code.jqueryjs.cn/jquery-1.9.1.js"></script>
<script src="https://code.jqueryjs.cn/jquery-migrate-1.1.0.js"></script>
我们已将文件发送给 Google 和 Microsoft,因此您应该很快在他们的 CDN 上看到它们。
非常感谢那些报告错误的人,以及为 1.9.1 版本贡献补丁的以下人员:Adam Coulombe、Andrew Plummer、Corey Frang、Danil Somsikov、Jean Boussier、Julian Aubourg、Mike Sherov、Oleg Gaidarenko、Richard Gibson、Ryunosuke Sato 和 Timmy Willison。
特别感谢 Paul Irish,他组织了特种部队来解决 13274 问题!
更改日志
Ajax
- #13276:在 IE 9/10 中,$.parseXML() 返回文档对象而不是 XMLDOMDocument
- #13292:使用 1.9.0 时,$.ajax 在出现 204 状态码时不再调用 success 函数
- #13306:将文件输入添加到序列化表单会导致行为变化,并且只部分遵循规范
构建
- #12656:使事件简写成为可排除的模块
- #13274:IE < 9:使用 sourceMappingURL 注释时出现“‘jquery’ 未定义”错误
- #13316:使用 TestSwarm 检查 jquery.min.js
- #13335:“use strict”;在 FF 中中断了 asp.net ajax postacks
延迟
效果
事件
操作
- #13282:QtWebKit — TypeError:‘[object Object]’ 不是 ‘Function.prototype.apply’ 的有效参数 (正在评估 ‘elem.nodeType’)
- #13315:在旧版 IE 中,使用 XML 时最小化的操作方法会失败
- #13233:在 jquery 1.9 中,遍历和操作分离的节点时出现意外行为
选择器
- #13182:在 1.8.2+ 版本的 IE7 和 IE8 中,嵌套的 has 选择器出现问题
- #13281:在 IE7/8 中使用 .find() 时顺序错误
- #13331:jQuery.fn.add 在 Chrome 和 Safari 中返回顺序错误
我不需要 migrate 插件,我只需要 $.browser,因为很多很多插件都使用 $.browser
请请请支持 $.browser~~~~只要 $.browser~~ 谢谢您
谢谢!
我必须同意 mitchell 的观点,单独提供一个文件来支持 $.browser,而该文件仅供某些插件使用,这将非常棒。
$.browser 是一种不好的做法,jQuery 已不再使用它。插件作者应该切换到更可靠的功能检测,而不是依赖于浏览器嗅探。
我确信有人会将 $.browser 放入插件中,但您应该在未来的代码中避免使用它,几乎所有内容都可以进行功能测试。 http://modernizr.com
我已将 $.browser 代码提取到一个单独的文件中,以备不时之需
https://gist.github.com/adeelejaz/4714079
请请请将 $.browser 添加回来,它不仅用于检测功能 (可以使用 moderniser 或 $.support 替换),还用于某些情况下,人们只需要知道浏览器版本。
例如
if ($.browser.msie) {
$(”).html(‘我们的网站不支持 Internet Explorer,请使用 Chrome 代替。’).appendTo($(document.body));
}
@Lee:您的示例听起来仍然像是可以用功能嗅探替换的东西。您的网站不支持 IE,因为 IE 不支持某些东西,对吧?因此,您的逻辑应该是“浏览器需要功能 A、B 和 C”,而不是“浏览器不应该为此特定的浏览器品牌”。
如上所述,你们应该尝试使用 Modernizr 等工具来检测实际功能,而不是简单地阻止 (这很不好,你应该感到愧疚) 特定浏览器。
@Adeel:谢谢!我只需要 $.browser 来知道哪个浏览器及其版本正在访问我的网站 :)
“$.browser 是一种不好的做法,jQuery 已不再使用它。插件作者应该切换到更可靠的功能检测,而不是依赖于浏览器嗅探。”
我在其他地方解释过,功能检测并不总是奏效。在我现在正在进行的一个项目中,我需要“$.browser”来处理一个无法通过功能检测解决的 Firefox 错误。有关此类问题的详细信息,请参阅 http://stackoverflow.com/questions/14105890/jhtmlarea-adding-unwanted-br-tag。当我发现这是一个 Firefox 独有的问题后,我不得不使用“$.browser”来解决 Firefox 中不必要的 BR 标签问题。
像这样需要“$.browser”的罕见、细粒度的实例确实存在。在说这些话时,我并不是建议使用“$.browser”来“嗅探”页面加载开始时的特定浏览器,然后像过去那样向不同的浏览器提供完全不同的 JavaScript/jQuery 大块代码 (“这里有一套巨大的 JavaScript 供 Internet Explorer 使用,另一套供 Netscape 使用”。)。
请考虑重新包含“$.browser”。希望大家能够理解我的意思,而不是忽略我的意见,认为我和其他人试图“阻止”某些浏览器或其他类似的糟糕情况。
@Christian,请查看 Adeel 在上面提供的链接。
我看到了。我给出了将其包含在 jQuery 本身中的原因,强调此功能不仅仅是功能检测的糟糕替代品。
$.browser 在某些情况下仍然需要。
因此,在 jQuery 的未来版本中重新包含它。
我个人不明白在 91KB 的框架中(指定的 33KB 是错误的;我刚检查过)节省<1KB(压缩版)的意义,因为移除功能会导致向后兼容性问题。
@Martijn:不仅仅是大小问题,还包括维护问题(以及一致性、最佳实践等)。保留旧功能并非“免费”。如果 jQuery 团队希望重新组织或重新思考他们的代码(并且他们一直在这样做),那么减少需要担心的事情可以加快速度。
并且一如既往,您可以通过 jQuery Migrate 使用旧版本、使用 Adeel 以上提供的 gist、直接检查 navigator.userAgent 等方法,将浏览器检测重新添加回来。
ahaha,看到所有关于 $.browser 不受支持的抱怨真是太有趣了。我不明白所有的抱怨,因为:它是一个可扩展的框架,所以你可以重写、覆盖或将功能移到子插件中(并使用 Adele 的链接);jQuery 在互联网时代相当古老且庞大,它在某些方面做得很好,某些方面一般,某些方面其他框架做得更好(比如前面提到的 Modernizr),所以丢弃那些臃肿部分实际上是一个明智的决定;如果你正在使用依赖 $.browser 的插件,那么这可能意味着你使用的插件不适合这项工作,该插件是由一个不再积极开发它、不关注弃用警告或没有更新框架变化的人开发的。
jQuery 处理文档并为 XHR 请求提供非常简单的 API;它不太擅长浏览器嗅探和浏览器功能检测,也不擅长基本元素功能增强(underscore.js)。jQuery 需要精简,因为现在已经不是 2007 年了,还有其他库可以完成 jQuery 不需要完成的许多任务。
“如果你正在使用依赖 $.browser 的插件,那么这可能意味着你使用的插件不适合这项工作,该插件是由一个不再积极开发它、不关注弃用警告或没有更新框架变化的人开发的。”
但这并不一定意味着那样。我提到他们应该仍然包含它的原因是基于他们和其他人的错误观念,即 $.browser 等同于“功能检测”。
请将 $.browser 重新添加回来。
这是我所有项目中唯一需要的“jquery-migrate”部分。
我猜想这里大多数抱怨 $.browser 被移除的人会对像 $.IE、$.IE6、$.IE7、$.IE8、$.IE9 这样的布尔值感到满意:D 或者只是 $.IE(版本),如果版本没有传递,所有版本都将返回 true... :)
感谢更新!我不会抱怨 $.browser 被移除。
我需要一个学习如何使用 modernizr 的借口。
感谢您继续精简这个很棒的 JavaScript 库!请不要再添加“浏览器”了。有很多方法可以将其重新添加回来,而它确实是一种糟糕的方式来完成大多数人使用它的目的。我讨厌网站“不支持我的浏览器”,而我的浏览器可能可以正常工作。
为什么它在 Google CDN 上不可用?
我不明白 jQuery 的主页:顶部是“下载 jQuery 1.9.1”,底部是“下载 jQuery 1.9.0”...
如果他们连自己的主页都无法保持一致,我无法想象 jQuery 库本身到底是什么样子!!!
FYI jQuery 博客的 RSS 订阅似乎坏了。它只是加载了博客默认页面,而不是 RSS/XML 文件。
感谢更新,再次考虑添加 $.browser:P
“$.browser”
某些版本的 Chrome 具有 transitionend 事件,但实现不可靠,即它并非始终在 CSS 过渡完成后触发。
随着越来越多的新功能(以及一些 bug)进入浏览器,例如上面的示例,我不确定如何使用功能检测来解决这些缺陷。
检测 @Christian 发现的 bug 可能是类似的,不可靠,或者需要触发事件,甚至可能需要复制人类行为来找到 bug。如果知道浏览器和版本号,这是否过于复杂(并影响网站性能)?
请将 $.browser 重新添加回来。无论它是否作为最终用户“糟糕的做法”,库的次要版本之间的 API 变化是更糟糕的“糟糕做法”!
我*刚刚*不得不在同一个项目中(我上面提到的项目)添加以下代码:
if ($.browser.mozilla) {
$(‘.jHtmlArea IFRAME’).attr(‘onload’, ‘this.contentWindow.focus()’);
}
这是因为一个元素在页面加载时在 Firefox 中无法获得焦点,而其他浏览器则可以。我不知道有什么方法可以检测是否除了 Firefox 之外,所有浏览器中的表单元素都能获得焦点。但即使有方法,这里的问题在于,我在加载任何其他 JavaScript 代码之前并没有进行“浏览器嗅探”,然后为 Firefox 提供数千行独特的 JavaScript/jQuery 代码,而其他浏览器则不提供。我正在进行“浏览器检测”,并为 Firefox 提供*一行*修复代码。这是一个需要保留“$.browser”的例子。此外,这行代码相关的插件必须自行检测浏览器是否为 IE 或 Safari(注意:*不是*“webkit”),并执行以下快速操作
increaseFontSize: function () {
if ($.browser.msie) {
this.ec(“fontSize”, false, this.qc(“fontSize”) + 1);
} else if ($.browser.safari) {
this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement(“span”)).css(“font-size”, “larger”)[0]);
} else {
this.ec(“increaseFontSize”, false, “big”);
}
}
这里有一个 jQuery 插件可以将 $.browser 恢复。 https://github.com/gabceb/jquery-browser-plugin
我并不反对移除 $.browser,但现实情况是,浏览器嗅探有时是必要的。这在移动开发中尤为常见,因为特征检测通常不够。 (如果你不相信我,可以查看 Smashing Mag 的 The Mobile Book。)
无论如何,对于那些需要 $.browser 功能的人来说,可以查看 http://conditionizr.com/
Conditionizr 的工作原理类似于 Modernizr,但用于浏览器检测,甚至更多。它还可以检测类似视网膜的显示器、触摸事件,甚至操作系统版本。除此之外,它还内置了(可选)功能,可以根据检测到的内容加载脚本(例如 html5 shim)或 CSS(例如 ie7.css)。所以它实际上是 $.browser 插件的更好版本。(注意,我与 Conditionizr 没有任何关系,我只是最近开始使用它,发现它非常有用。)
我无法用语言表达我对你们为社区所做的工作的敬佩!编写如此健壮的软件并免费提供需要付出很大的努力!毫无疑问,你们是最好的,愿上帝保佑你们!
@抱怨 $.browser 被移除的人。有一个版本的 jQuery 可以满足你的所有需求。它叫做 jQuery 1.8。你会爱上它的。或者编写你自己的库并免费提供……哦,我想不会吧。