Prototype 1.6.0 で大きく進化したイベント API

Prototype 1.6.0 RC にはいくつもの変更点がある。

特に イベント周りの API で顕著だ。Event.observe メソッドなど、お馴染みの API が大幅に手を加えられている。

Prototype 1.6.0 のブラウザ判定と iPhone

prototype.js には 1.5.1 から、各種ブラウザを判定するための Prototype.Browser が定義されている。

var Prototype = {
  ...
  Browser: {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
  ...

使い方は一目瞭然だろう。

たとえば Internet Explorer の場合は Prototype.Browser.IE が、Safari など WebKit を利用しているブラウザでは Prototype.Browser.WebKittrue になる。

Prototype 1.6.0 RC での Prototype.Browser

そして、Prototype 1.6.0 RC では、ここに新しい定義が追加された。

Prototype 1.6.0 と DOMContentLoaded

Prototype 1.6.0 のリリース候補版が公開されたようだ。

変更点が多い。目を引くものとしては、クラスの継承がサポートされた。新しい Class.create では親クラスを指定できる。いままでは Object.extend によるコピーで擬似的な継承をしていただけなので、これは嬉しいかもしれない。

クロスブラウザな DOMContentLoaded イベント

また、「window.onload 前でも DOM 処理が可能なら通知してくれる domready.js」という記事でも書いた、DOMContentLoaded がサポートされた

document.observe("contentloaded", function() { ... })

従来の Element#observe メソッドを通して、透過的に扱うことができる。これで、先の記事にアップしていた domready.js は不要になるだろう。

1.6.0 には他にも色々面白そうな機能が追加されている。暇があるときに追々調べていくつもり。

prototype.js の $$ 関数で CSS 風に DOM プログラミング

prototype.js$$ 関数(実際の処理は Selector.findChildElements)は CSS セレクタを受け取り、セレクタにマッチする要素を配列で返してくれる。

var links = $$('#contents a');

だが、単純にひとつのセレクタだけではなくて、複数のセレクタを引数に渡したり、CSS と同じく、カンマ区切りで複数指定することもできる(結果は重複要素のない配列となって返ってくる)。

var links = $$("#contents a", "#footer .items a");

このコードは、こう書くこともできる。

var links = $$("#contents a, #footer .items a");

そして、いまさらながら気づいたのは、これらの特徴を利用すれば、DOM の処理を CSS のように宣言的に書くのが可能だ、ということ。

window.onload 前でも DOM 処理が可能なら通知してくれる domready.js

DOM 読み込み完了のタイミングで、任意の関数を実行できるようにする JavaScript ライブラリを書いてみた。

mootools の同様の機能を基にしていて、単体として使いやすいように外部ライブラリへの依存性をなくし、prototype.js とも併用できるようにしたもの。

現状、手元の環境では以下のブラウザで動作確認済み。

  • IE 7 (XP standalone)
  • IE 6 SP2
  • Firefox 2.0.0.4
  • Opera 9.21
  • Safari 2.0.4
  • Mac Firefox 2.0.0.4
  • Mac IE 5.2.3

ただし、Mac IE では window.onload で代用するように実装してある。まあ、スクリプトエラーが出るよりマシだろう。

  1. 1
  2. 2
  3. 3
  4. 4
(20 記事)

Want fries with that?

Open Source Projects