Hatena::Groupweb

vantguarde

12.15

State of the Browsable Web (Dec 2008) ― WebAPIs

| 23:57

2008年12月現在の、WebAPIに関する状況をまとめときます。

ちなみにWebAPIはGoogleとかAmazonのWebサービスAPIのことではなく、DOMのインターフェースとかです。

JavaScriptとかDOMに明るくないので、今回は抜けとか誤認識とかが結構あるかも。

XMLHttpRequest Level 1

いまさらな感じのするXMLHttpRequestですが、標準化がWebApps WGで進められています。4月に2度目のLCになりましたが、その後もフィードバックを受けてアップデートされています。

現時点ですでに大量のdisposition of commentsがあるので、もう一度Last Callがきてもおかしくはなさそうです。

すでに実装されているものの標準化はいろいろ大変ということでしょうね。CSS 2.1にしろHTMLにしろ。

XMLHttpRequest Level 2, Access Control

Level 1もまだなのに、XMLHttpRequest Level 2が平行して進んでいます。クロスドメインで通信するために、XHRを拡張して対応します。これをやりたいのでLevel 1を作ってるんでしょうか。

XHR2は、Access Controlで定義されたヘッダーを解釈して処理を行います。Access Controlはcrossdomain.xmlのHTTP版みたいなものでしょうか。

実装状況はFirefox 3.1が先行している感じでしょうか。WebKitもたしかサポートしています。どちらの仕様にも未確定な部分があり、フルサポートには至っていません。Operaは調べてませんが、EditorがOperaの人間なので、動いてないってことはないでしょう。

IEについては、XDomainRequestなんていう独自オブジェクトを定義してます。ただ、WebApps WGでの話し合いでAccess-Controlについては、互換性を確保するようになったので、そこまで面倒なことにはならなさそうです。

Selectors API

「Selectors APIがLast Callへ」でも書きましたが、Selectors APIが2回目のLCになりました。Safari 3.1, Firefox 3.1, IE8, Opera 10が実装するというびっくりな仕様です。

今後ですが、仕様の曖昧な部分をつめてからCRに進み、テストケースの作成を行ってPR→RECになるはずです。うまくいけば来年中頃あたりでしょうか?

Element Traversal

WebApps WGからの最初の勧告は、Element Traversalになりそうです。PRが先月に出たので、うまくいけば今週末か来週頭に勧告されるかも。

これ、もともとSVG Tiny 1.2で定義されていたものなんですが、HTMLとかでも使えると便利だよねって事で分離されました。Opera 9.5、Safari 3.1ではすでに実装済み、Firefoxも3.1で実装される予定です。

で、「こいつの子要素」を表すプロパティが定義されていないのに疑問を持たれたりしています。childElementsは提案されたりしていたんですが、Appleが乗り気じゃないからとかそんな理由で仕様化されてません。ただどのブラウザーもchildrenなるプロパティを実装している(Fxは3.1から)ので、そんなに問題は無いかと思われます。

CSSOM

DOM2 CSSを置き換える目的で作られているのがCSSOMです。CSS WGの管轄ですが、こっちで紹介してみます。

紹介してみるとは言ったものの、進展がありません。いちおうCSSOM, CSSOM Viewが書かれてはいますが、先は長いかなあと。

Progress Events

XHRなどのデータ転送の経過をモニタリングするためのProgress Eventsなんてものもあります。Firefox 3.1で部分的にサポートされるようです。XHR2になるといろいろ楽しそうですね。

Web IDL

そんなWebAPIを定義するのに必要なのが、Web IDLです。定義されているIDLが、どのようにECMAScriptやJavaにマッピングされるかを定義しています。HTML5なんかでも使われてますね。

最後がてきとーになりすぎていますがこの辺で。

10.30

Selectors APIがLast Callへ

| 13:38

ただし二回目ですが。

EDも更新されてます。

一年前のWDからの変更点は

  • StaticNodeListがなくなった
  • DocumentFragmentにも適用できるようになった
  • NSResolverの削除
  • DOM Feature Stringの追加

などなど。

StaticNodeListは、「新しいインターフェース作るより『ただしnot liveに限る』って書いたほうがいいよね」→「ってかNodeListがliveなものを返すってDOM3 Coreのバグじゃね?」みたいな流れでなくなりました[要出典]。GeckoとかWebKitは現在の仕様に近い実装になってますが、IE8ではMSDNにもう登録されているあたり、古い実装のままリリースされてしまいそうな感じも……そこまで深刻な非互換ではないと思うので、まあいいのかなあとも思いますが。

NSResolverは名前空間を扱うニーズとか名前解決のめんどくささもあり、現バージョンからは取り除かれる決定がなされてます。ただ、Mozillaの人が「ほしい」とつぶやいてるので、level 2あたりで導入されるはずです。

さてさて、ひとつ残念なのが“Contextual Selector”という擬似クラスが結局導入されなかったこと。

今のSelectors APIでは、「コンテキストの子要素であるdiv」みたいなクエリをかけることができません。どういうことかは、「CSS Selector の最大の欠点」を読むとわかるかなと。

これについてはJohn Resigも“Thoughs on querySelectorAll”で書いていて、WebApps WG(当時はWebAPI WG)にコメントを投げたりしています。

WGもそれは認識していたようで、その結果提案されたのがContextual Selectorでした。これを使うと「querySelectorAll(":scope > div")」みたく書けるわけで、その後一部の人*1の気を引いていたんですが、このたび却下になりました。ちぇっ。

まあ、実装も進んできてるなか今から新機能の追加というのも酷ですし、擬似クラス自体の標準化を行う手間もありますし、仕方がないかなとは思います。こちらもlevel 2での導入が考えられている*2ようなので、Selectors API level 2にはもっと期待したいところ。

LCにしてもいいかーっていうメールが流れました。公開も時間の問題かなと。

*1:主にd:id:amachangとぼく

*2Feature Requestsにも登録されてる

10.22

Selectors API

| 20:57

そういえばCSS-Beijingと同じ日にSelectors APIの最新版が出てました。CSSセレクタで要素とかノードリストを返すAPIだそうです。

どんなのかはを見ると一番早いです。そのままはっつけます。

<table id="score">
  <thead>
    <tr>
      <th>Test
      <th>Result
  <tfoot>
    <tr>
      <th>Average
      <td>82%
  <tbody>
    <tr>
      <td>A
      <td>87%
    <tr>
      <td>B
      <td>78%
    <tr>
      <td>C
      <td>81%
</table>

DOM2で値を取るには次のコードが必要でした。

var table = document.getElementById("score");
var groups = table.tBodies;
var rows = null;
var cells = [];

for (var i = 0; i < groups.length; i++) {
  rows = groups[i].rows;
  for (var j = 0; j < rows.length; j++) {
    cells.push(rows[j].cells[1]);
  }
}

でも、Selectors APIのひとつ、querySelectorAll()を使えばあら簡単。

var cells = document.querySelectorAll("#score>tbody>td:nth-of-type(2)");

CSSのセレクタつかって取れちゃうってことですね。

ドラフト毎に名前が違ったりとかしてまだ安定してなさげなのが気がかりですが、直感的でいいですねえ。

Contact: @vant / lepetitcroissant@gmail.com.