Hatena::ブログ(Diary)

IT戦記 このページをアンテナに追加 RSSフィード

2009-04-01

Micorosoft、 2010 年を目処に addEventListener 問題を解決することを発表

はじめに

マイコロソフト コーポレーションは、日本時間 3 月 32 日(水)、技術カンファレンス M!X 2009 において、同社が 2010 年を目処に addEventListener 問題を解決することを発表した。

addEventListener 問題とは

addEventListener 問題とは、一部のウェッブブラウザというソフトウェアに attachEvent というバグがあることに起因する問題。

この問題のために書かれた addEventListener の場当たり的な実装は、 100,000 種を超えると言われ、それらを実装するプログラマーのため息から排出される CO2 は実に年間 100 万トンにのぼるとも言われている。

この問題は、国連が掲げる「人類が次の 10 年に解決すべき問題」にも挙げられ、世界中の人がこの問題の解決を望んでいる。

解決方法

今回、 Micorosoft が発表した解決策は Document Object Model Prototypes, Part 2 に示されており、 IE8 で登場した setter という機能を使うという「誰でも思いつきそう」で「今までは出来なかった」逆転の発想だ。

業界関係者はこの解決策を「Micorosoft がやること自体に意味がある」と語った。

残る第 3 引数問題

この解決策が実施されることで、ひとまず addEventListener 問題は解決するが、この解決策は新たな問題「第 3 引数問題」を生み出す。この問題は一部のウェッブブラウザの責任者がキャプチャリングという概念について理解できなかったころとに起因する問題である。

ただ、第 3 引数が有効に働くシチュエーションは少なく、この問題自体が都市伝説とも言われている。

Micorosoft は「第 3 引数をどうするのか?」という疑問に対して、「われわれは、第 3 引数の煩わしさからデベロッパーを解放する」と述べ、第 3 引数の存在自体を否定した。

2008-03-31

IE8 に実装された getCascatedCSSSelectors 関数とは何か

4 月 1 日ですね!

getCascadedCSSSelectors 関数とは

getCascadedCSSSelectors 関数とは、 HTML54-1. the default views 定義されているインタフェースで、要素にあたっている CSS セレクタ配列で取得するための関数です。

window オブジェクト(グローバルオブジェクト)が持っている関数なので普通に、以下のように呼び出すことができます。

var element = document.getElementById('main-content');
var selectors = getCascadedCSSSelectors(element);

alert(selectors[0]); // #main-content
alert(selectors[1]); // div.section
alert(selectors[2]); // div
alert(selectors[3]); // *

たとえば、この例の場合は 4 つの計四つの CSS セレクタがあたっていることが分かります。

カスケード順とは何か

複数の CSS のルールが要素にあたっている場合に、優先される順のことをカスケード順と言います。

!important 宣言の扱い

一つのセレクタが示すルール内に !important 宣言を含むプロパティと !important 宣言を含まないプロパティが存在する場合、 getCascadedCSSSelectors の結果に同じセレクタが二つ含まれることになります。

たとえば、以下のような場合は

#hoge {
 font-size: 2em;
}
* {
 color: red;
 background: red !important;
}

結果は以下のようになります。

var element = document.getElementById('hoge');
var selectors = getCascadedCSSSelectors(element);

alert(selectors); // ['*', '#hoge', '*']

まとめ

getCascadedCSSSelectors 便利すぎる!

みなさんも触ってみてはいかがでしょうか。