■
2012/06/30 XSSについて追記しました
jQuery 1.8のbeta 1がリリースされました。
このバージョンではcustom buildが可能になる「modularity」という機能が追加されました。
この機能により、ajax, css, dimensions, effects, and offsetという機能を除外したjquery.jsをbuild可能になります。
最小セット(すべてを除いた)ではminifiedかつgzip化された状態で28KBまで小さくなるようです。
個人的にはnodeなどでの利用を考えて、domの部分(sizzle)を選択可能にして欲しいところではありますが、underscoreなどのことも考えると、その部分はlibraryレベルでの使い分けをするほうがよさそうです。
MODULARITY
grunt.jsを利用し、custom biildを行うことができます
$ grunt custom:-ajax
とすることで、ajax機能を除外したバージョンをビルドできます。
手元で、確認したところ、$.getを見るとundefinedになっています。
VENDER-PREFIX CSS PROPERTIES
デザイナを含めて頭痛の種である、VENDER-PREFIXに対して、ブラウザに応じた適切なPREFIXをつけてくれる機能が実装されました。
これにより、
$("#myscroll").css("marquee-direction", "backwards")
と記載することで、例えば、Chromeを使っていた場合、CSSには、「-webkit-marquee-direction: backwards」と適切なPREFIXが付けられます。
ANIMATION (EFFECTS)
これまでの経年により入り組んでいたコードを今回のバージョンで綺麗にし、統制下(笑)に置きました。
これにより、animationを追加したり、改変することが可能になります。
jquery-uiを入れるほどではないけど、もう少し色々したいなぁってことは多かったので、この機能も個人的にはすごく嬉しい機能です。
今回は事前資料も用意しているようです。
SIZZLE CSS SELECTOR ENGINE
SIZZLEのmajorな書き直しも今回のバージョンで入り、パフォーマンスに大きな改善が入ったようです。
パフォーマンスを見ると、Operaたんで、すごい改善されているようですね。
具体的なコードは後で追いたいとおもいます。
XSS PROTECTION
$() methodでscriptタグ作るとinlineでscript記述できてしまいました。このようなケースは、jQueryを利用していようといまいと、多くのサイトで見られました。
1.8の次のバージョンである1.9で$()の役割をより厳しくする予定です。
今回の1.8では明確にHTMLとしてparseされることをユーザに知らせる$.parseHTMLを追加しました。
この挙動を少し見てみると
console.log($.parseHTML('<script></scr'+'ipt>')) // -> [<script></script>] console.log($.parseHTML('<script>')) //-> [<script></script>] console.log($.parseHTML('<script src="./hoge.js"></scr'+'ipt>')) // -> [] console.log($.parseHTML('<script>alert(1)</sc'+'ript>')) // -> [] console.log($('<script>alert(1)</sc'+'ript>')) // -> [<script>alert(1)</script>]
なんかよさそうですが、malaさんが出された報告の一番最後のコメント
var param = "]<img src='/' onerror='alert(1)'>["; console.log($("a[rel=" + param + "]")) console.log($.parseHTML("a[rel=" + param + "]"))
に対しては、全然変わらず、XSSが残されています。
fixされててに問題は移されたらしいんですが、こちらもfixされています。
なんでだろう。
でも、まあ、コメント見ると、$()が厳しくなるようなので、エンドユーザにとってはいいことだと思います。
SPRING CLEANING
trip hazzardをなくした、って書いてあって、repoが貼ってあるんですが404とかどういう罠ですか?
$.browserを1.9で無くします。そのかわりpluginを使ってください。
$.subは、便利さとかロバストネスを示せませんでしたw 1.9のcompatibilty pluginつかってください。