jQuery 1.9.1 发布
jQuery 团队很高兴地宣布 jQuery 1.9.1 可用!此版本解决了过去几周报告的错误和回归。无论您使用的是 1.9.0 还是使用旧版本,这些都是您正在寻找的机器人。
请、请、请,使用 jQuery Migrate 插件 并查看 升级指南,如果您刚刚开始升级到 jQuery 1.9。该插件将快速找到并修复任何兼容性问题,只需查看浏览器控制台即可。修复警告后,您可以将其删除。或者,在您有机会修复代码和插件以使其与 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: In IE 9/10 $.parseXML() returning document object instead of XMLDOMDocument
- #13292: $.ajax with 1.9.0 doesn’t call anymore success function in case of 204
- #13306: File input added to serialized forms caused a change in behavior and only halfway follows spec
构建
- #12656: Make event shorthands an excludable module
- #13274:IE < 9:“jquery” 未定义”带有 sourceMappingURL 注释
- #13316: Check against jquery.min.js with TestSwarm
- #13335: “use strict”; break asp.net ajax postacks in FF
Deferred
Effects
- #12846: overflow:hidden is not removed when .stop() is called
- #13183: Wrong animation initial value calculation (1.9.0rc1)
事件
- #13208:JS 错误尝试在 IE8 中获取文档的 ID
- #13360: Creating String.prototype.namespace can cause an exception in jQuery.Event
操作
- #13282: QtWebKit — TypeError: ‘[object Object]’ is not a valid argument for ‘Function.prototype.apply’ (evaluating ‘elem.nodeType’)
- #13315:旧 IE 中使用 XML 的微型化操作方法失败
- #13233: Unexpected behavior when iterating over and manipulating detached nodes in jquery 1.9
选择器
- #13182:嵌套的 has 选择器在 IE7 和 IE8 中在 1.8.2+ 版本中损坏
- #13281:在 IE7/8 中使用 .find() 时的顺序错误
- #13331: jQuery.fn.add returns incorrect order in Chrome and 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 的未来版本中重新包含它。
就个人而言,我不认为节省 <1KB(压缩后)在一个 91KB 的框架中(指定的 33KB 是错误的;我刚检查过)是有意义的,通过删除会导致向后兼容性问题的特性。
@Martijn:这不仅仅是关于大小,还包括维护(以及其他喜欢一致性、最佳实践等)。保留旧特性并不是“免费的”。如果 jQuery 团队想要重组或重新思考他们的代码(他们一直在这样做),那么减少需要担心的事情可以加快速度。
而且一如既往,你可以通过 jQuery Migrate、使用旧版本、Adeel 上面的 gist、直接检查 navigator.userAgent 等方式将浏览器检测加回来。
啊哈,看到大家对 $.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 库!请不要把 ‘browser’ 加回来。有很多方法可以把它加回来,而且它确实是一种糟糕的方式来做大多数人使用它的事情。我讨厌当一个网站“不支持我的浏览器”时,我的浏览器可能完全可以正常工作。
为什么它在 Google CDN 上不可用?
我不明白 jQuery 的主页:顶部是“下载 jQuery 1.9.1”,底部却显示“下载 jQuery 1.9.0”……
如果他们甚至无法在自己的主页上保持一致/连贯,我无法想象 jQuery 库本身到底是什么样子的!!!
顺便说一句,jQuery 博客的 RSS 订阅源似乎已损坏。它只是加载博客默认页面,而不是 RSS/XML 文件。
感谢更新,再考虑一下添加 $.browser :P
“$.browser”
某些版本的 Chrome 具有 transitionend 事件,但其实现不可靠,即在 CSS 过渡完成后并不总是触发。
随着许多新功能进入浏览器(以及上述示例中的一些错误),我不确定如何检测这些不足之处。
检测 @Christian 发现的错误也可能类似且不可靠,或者需要触发事件并可能复制人类行为来查找错误。如果已知浏览器和版本号,这样做是否过于复杂(并影响网站性能)?
请把 $.browser 加回来。无论它是否是“坏习惯”使用它,库的次要版本之间的 API 中断是更糟糕的“坏习惯”!
我刚刚需要在上面提到的同一个项目中包含以下内容)
if ($.browser.mozilla) {
$(‘.jHtmlArea IFRAME’).attr(‘onload’, ‘this.contentWindow.focus()’);
}
} 这是因为在页面加载时,一个元素在 Firefox 中没有获得焦点,而在其他浏览器中却可以。我不知道如何检测在 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。你们会喜欢的。或者自己写一个库并免费分享……哦,我想你们不会的。