IE9 preview - JavaScript Side

野薔薇を守るトゲのような表現を改め、春のたおやかな小川のように、夏の涼しい木漏れ日のようにやわらかくしてみました。

IE9 preview 版でましたね → http://ietestdrive.com/

動作させるには、Windows VISTA SP2 + IE8 または Windows 7 が必要です。快適に動作させるには、GPUを積んだデスクトップPCが必要。ネトゲをプレイできないようなノートPCで動かそうとすると、強烈なガクガク感が春の陽気に誘われて、こくっこくっと今にも居眠りしそうな小学生のごときレスポンスが

GPUを使うから速い」のだそうですが、IE9は、OS限定、動作環境限定で、低レベルレイヤー(DirectX)を直叩きできる恵まれた環境にあります。さまざまなOSや環境をサポートする他のブラウザのように、オーバーヘッドを支払う必要がないので、そのへんの事に触れずにIE9を絶賛する記事を見ると「有利な部分だけ紹介し、不利な部分を隠して紹介するのは、フェアじゃない」とか思いました。

手持ちのノートPC(2台)で試したところ、IE9 preview は Google Chrome5 や Opera10.50 の性能には遠く及びませんでした足元を喜びの表情でくるくる廻る、子犬のような可愛らしさがありました。ページをスクロールするだけでガリっと引っかかりますと、まるで江戸前初物を味わったあとの、深い余韻のような、そのような間を感じつつスクロールしました

さて本題

IE9 previewACID3 で 55点を取得しています。これはどういうことかというと、

  • test 07: DOM Range の基本的な実装が入った
    • test 09: extractContents が実装されている
    • test 11: Ranges and Comments が実装されている
    • test 12〜13: Ranges under mutations が実装されている
  • test 21: document.createElementNS が実装されている
  • test 30: dispatchEvent が実装されている
    • test 31〜32: DOM Event の基本的な実装が入った
      • addEventListener(node, type, capture) でイベントをキャプチャーできる
      • キャプチャーフェーズをサポートした
      • event.stopPropagation をサポートした
      • event.eventPhase をサポートした
      • event.target をサポートした
  • test 34〜37: :lang, :first-child, :last-child, :only-child を(正しく)サポートした
  • test 38〜44: 省略
  • test 45: style.cssFloat をサポートした
  • test 46: media queries は未サポート
  • test 47: { cursor: ... } は仕様に準拠していない
  • test 48: :link と :visited を仕様どおりに実装しなおした
  • test 49〜51: tableアクセッサをサポートした
    • table.createCaption()
    • table.createTHead()
    • table.createTFoot()
    • 動的なテーブルの作成方法が仕様に準拠 などなど
  • test 53: <input type="text"> を <input type="password"> に変更可能に
  • test 68: UTF-16 surrogate pairs はイケルらしい
  • test 74: iframe 内での getSVGDocument() に問題あり
  • test 75〜76: SMIL in SVG に問題あり
  • test 77: external SVG fonts に問題あり
  • test 78: SVG textPath and getRotationOfChar に問題あり
  • test 79: <svg:font> に問題あり
  • test 89〜90: Regular Expressions に問題あり
  • test 93: FunctionExpression semantics がES3, ES5と互換性なしECMAScript-262 と異なる
// test 93: FunctionExpression semantics
function test93() {
  var functest;
  var value = (function functest(arg) {
    if (arg) return 1;
    functest = function (arg) { return 2; };
    return functest(true);
  })(false);

  alert(value === 1 ? "OK" : "NG"); // IE9 は value === 2 になる
}
  • test 94: throw "hoge" で正しく例外を送出できていない → new Error("hoge") ならOK
  • test 97: data: URI のパースに問題あり
  • test 98: XHTML の扱いに問題あり

と、いうことのようです。

オレもオレもテスト

気になるところだけテスト

こちらで試せます → http://pigs.sourceforge.jp/blog/20100317/demo/ie9.htm

<!doctype html><html><head><meta charset="utf-8" /><title>IE9 preview</title>
<style>body { font-size: x-large }</style>
<script src="uu.js"></script>
<script>
function xwin(uu) {
    // -----------------------
    // is IE
    //      IE8         -> true
    //      IE9         -> false
    //      Firefox3.6  -> false
    //      Opera10.50  -> false

    var isIE = [,]!=0;

    uu.trace("isIE= ", isIE); // IE9 is false (FIXED!)

    // -----------------------
    // IE has Array literal bug
    //      IE8         -> 3
    //      IE9         -> 2
    //      Firefox3.6  -> 2
    //      Opera10.50  -> 2

    var ary = [1,2,];

    uu.trace("[1,2,]= ", ary.length); // IE9 is 2 (FIXED!)

    // -----------------------
    // IE has String.split(/expr/) bug
    //      IE8         -> ["1", "2"]
    //      IE9preview  -> ["1", "2"]
    //      Firefox3.6  -> ["1", "2", ""]
    //      Opera10.50  -> ["1", "2", ""]

    uu.trace('"1,2,".split(/,/)= ',
                "1,2,".split(/,/)); // IE9 is ["1", "2"] (BUGGY!)


    // -----------------------
    // IE9 has document.addEventListener
    uu.trace("addEventListener= ",
                document.addEventListener ? true : false); // IE9 is true

    // -----------------------
    // IE9 has document.defaultView
    uu.trace("document.defaultView= ",
                document.defaultView); // IE9 is true

    // -----------------------
    // IE9 has not window.getComputedStyle
    var defaultView = document.defaultView || {};

    uu.trace("getComputedStyle= ",
                defaultView.getComputedStyle || null); // IE9 is null
}
</script></head><body>
<div id="trace"></div>
</body></html>
  • IE9 では [,]!=0 で、IEかどうかを判定できない (予想通り)
  • IE9 では [1,2,].length === 2 になる (予想通り)
  • IE9 では "1,2,".split(/,/) が ["1", "2"] を返す (修正されてない)
  • IE9 では document.addEventListener が使える
  • IE9 では document.defaultView が追加されてる (IE8 にはなかったよ)
  • IE9 には document.defaultView.getComputedStyle や window.getComputedStyle がまだ実装されていない

document.defaultView.getComputedStyle がまだ実装されていませんが、IE9 preview 2 では実装されてる気がします。