vi
序章
本書の内容
Ajax は本書の執筆時点で非常に注目を集めている新しい技術であり、この技術の内幕を名高
いManning 社の「In Action」シリーズの1 冊として紹介できることをうれしく思います。ただ、
本書を執筆する中で、私たちはちょっとした問題に突き当たりました。Ajax はホットなトピッ
クですが、実際には新しい技術ではないのです。また、技術と呼ぶのも多少語弊があります。
どういうことか説明しておきましょう。Ajax では、よく知られているいくつかのウェブ技術を
組み合わせ、それらを新しい興味深い方法で使用します。まったく新しい技術の使い方を初めて
学ぶ時は、まっさらの状態から始めるられるので、ある意味では単純に話を進めていくことがで
きます。しかし、Ajax の場合はそうはいきません。さらに、学ばなければならないことはたくさ
んあります。そのため、本書は「In Action」シリーズの他の書籍とは少し異なる構成になってい
ます。本書を読んでいてこの点が気になるかもしれませんが、Ajax というテーマにとってはこの
構成がベストであると理解してほしいと思います。
また、本書を読み進めていくとわかりますが、Ajax 技術そのものはすべてクライアントサイド
の話であるものの、その特徴はサーバーサイドにも及びます。本書では主にクライアントサイド
プログラミングを取り上げ、紹介するコード例の大部分はJavaScript です。Ajax の原則は、ク
ライアントとサーバーをきれいに分離し、どんなサーバーサイド言語にも対応できるようにする
ことです。そこで本書では、多様な環境を使用する読者を想定し、サーバーサイドコードをPHP、
Java、C#、Visual Basic .NET などさまざまな言語で記述することにしました。さらに、どんな
環境にも移植できるようにするため、特定の実装に依存しないシンプルなサーバーサイドコード
を書くように努めました。言語固有の機能を使用しなければならないところでは、その環境にな
じみのない読者でも処理の内容を理解できるように、詳しい説明をしています。
本書の対象読者
Ajax は、さまざまな分野の交差点に位置しています。そのため、本書の読者もさまざまな方面
からアプローチしてくるものと考えられます。ある人は、コンピュータ工学の学位を持ち、大規模
なソフトウェアプロジェクトの現場で何年間も経験を積み、時々プレゼンテーション層の開発に
首を突っ込んでいる、というプロフェッショナルなエンタープライズ開発者かもしれません。ま
たある人は、グラフィックデザインの分野からウェブデザインやいわゆる「ニューメディア」の分
野に進み、PHP、Visual Basic、JavaScript/ActionScript などのスクリプト言語を使ったプログ
ラミングを独学しているプロフェッショナルなクリエータかもしれません。あるいは、その中間
に分類される人々、たとえばウェブの勉強をし直しているデスクトップアプリケーション開発者
や、ウェブベースの管理ツールを統合するよう指示されたシステム管理者などもいるでしょう。
Ajax-ch00 06.5.17 19:11 ページviこうした人々は、Ajax に真剣に興味を持っています。本書では、これらすべての読者のニー
ズに(少なくともある程度までは)応えようと努力しています。サーバーサイド開発者のために、
ウェブブラウザをダム端末として扱う際に使用する基本的なウェブ技術についての参考資料を紹
介しています。また、アドホックなコーディングスタイルに慣れているであろうニューメディア
開発者のために、ソフトウェアの設計と組織化についての基礎知識を説明しています。Ajax は
分野横断的な技術であるため、どの方面から来た読者であっても、あまりなじみのない領域にぶ
つかることになるでしょう。私たちが読者の知識を広げる手助けをしますので、本書を読みなが
ら、新しいスキルを身に付けていってほしいと思います。私たちもAjax を利用しながら同じよ
うに学んできましたし、本書の執筆を進める間も新たに学んだことが多くありました。これは非
常に実り多く、楽しい経験であり、新たな専門分野を開拓できるというメリットもあります。
本書の構成
本書は4 つのパートに分かれています。Part Ⅰでは、Ajax とは何か、開発ツールとしてAjax
を利用すべき理由、Ajax 開発に役立つツールについて説明します。Part Ⅱでは、Ajax アプリ
ケーションを動作させるためのコアテクニックを取り上げ、Part Ⅲでは、これらを踏まえたうえ
で、ただの概念実証コードを実動環境で使えるソフトウェアにするために何が必要かということ
を解説します。Part Ⅳでは、実践的アプローチを採用し、5 つのAjax プロジェクトを段階的に作
成していきます。それぞれの章では、これらのプロジェクトをリファクタリングし、読者のウェ
ブアプリケーションでもすぐに使用できるコンポーネントにします。
前にも述べたように、Ajax は技術ではなく方法論です。そこで第 1 章では、Ajax 以前のウェ
ブ開発に慣れている開発者のために、Ajax という新しいプロセスの考え方を改めて説明します。
具体的には、Ajax と従来のウェブアプリケーションとの基本的な違い、ユーザビリティについ
ての考え方、有益な概念などについて解説します。Ajax の周辺事情を知りたい人は、まずここ
を読んでください。実際のコードをすぐにいじってみたい人は、第 2 章に進んでください。
Ajax を構成する各種の技術について、すでに十分な資料が公開されています。第 2 章では、簡
単な例を紹介しながら、これらの技術をひととおり見ていきます。しかし、包括的な解説をする
つもりはありません。これらの技術をAjax の一部として利用する際に、それぞれの技術の使い
方や振る舞いがどのように変わるかということを重点的に説明します。
第 3 章では、本書の第三のテーマである Ajax コードベースの管理について説明します。
JavaScript コードベースは大きくなり、ソースコードが1.5MB を超える場合もあることを考え
ると、Ajax 用の JavaScript を記述することは、これまでとは違う手法が必要であると言えま
す。ここではデザインパターンとリファクタリングについて取り上げますが、それはこれらの手
本書の内容 Ajax-ch00 06.5.17 19:11 ページviiviii
序章ちが実感したからです。実行速度を求めるようになれば、読者もきっと同じ意見を持つことで
しょう。
第 4 章と第 5 章では、Ajax のコアコンポーネントに目を向け、デザインパターンの知識を応用
してベストプラクティスを見出します。第 4 章では、従来のウェブ開発でおなじみのMVC(モデ
ル・ビュー・コントローラ)パターンを新しい方法で適用して、クライアントサイドのコードを
クリーンに保つ方法を見ていきます。第 5 章では、クライアント/サーバー間のさまざまな通信
方法を取り上げ、各種のフレームワークをAjax に適用する方法について解説します。ここまで
の章で、Ajax に関する基礎知識はすべてカバーしたことになり、Ajax の動作の仕組みをひとと
おり理解できるでしょう。
第 6 章から第 8 章では、ここまでに得た基礎知識を踏まえて、アプリケーションの完成度を高
め、ただの概念実証コードから魅力的で安全かつ実用に耐えるアプリケーションにするための方
法を説明します。第 6 章では、ユーザビリティに焦点を当て、非同期タスクの実行中に、ユー
ザーに適度な情報を知らせ続ける方法を詳しく見ていきます。すべての処理をユーザーに見せる
必要はありませんが、何も知らせないのもいけません。どのくらいのバランスがよいのかを見極
める方法を紹介します。
第 7 章では、Ajax におけるセキュリティの問題をさまざまな角度から見ていきます。Ajax は
ウェブ技術であり、Ajax が直面する問題の多くは、他のウェブアプリケーションと何ら変わり
ません。この章では、Ajax 固有の問題(生成されたJavaScript をサーバーからセキュアにイン
ポートする方法、ウェブサービスのエントリポイントを不正な直接操作から保護する方法など)
に焦点を当てながら、セキュリティの基本を説明します。重要なアプリケーションの場合、セ
キュリティは絶対に講じなければならない措置です。ここでは、セキュリティを制御するために
必要な基本的手順を説明します。
第 8 章では、もう1 つの必要不可欠な措置であるパフォーマンスについて取り上げます。アプ
リケーションのパフォーマンスをモニタする方法と、パフォーマンスを向上させ、そのパフォー
マンス向上をアプリケーション全体に反映させるためのコード分析の方法を説明します。
Part Ⅳとなる第 9 章から第 13 章では、実際のAjax プロジェクトを見ていきます。どのサンプ
ルでも、まずは簡単な方法で機能を実装し、その後で、わずか数行のコードを書くだけで読者の
開発プロジェクトに組み込める堅牢なアプリケーションへとリファクタリングします。このプロ
セスにより、Ajax の原則を理解し、再利用のメリットを知り、Ajax のリファクタリングの実践
的な例を見ることができます。
Ajax-ch00 06.5.17 19:11 ページviii第 9 章では、HTML フォームをAjax で拡張して、ユーザー体験を向上させる簡単な方法を紹
介します。具体的には、ユーザーがあるフィールドにデータを入力した時に、バックグラウンド
でサーバーにリクエストが送られ、2 つ目のドロップダウンリストに項目が自動的に取り込まれ
るようにします。第 10 章でも、引き続きフォームの拡張というテーマに取り組みます。ここで
は、ユーザーのキーストロークに応答してサーバーからデータを取り出すことで、動的な入力補
完を実装します。
第 11 章では、さらに一歩進めて、Ajax ユーザーインターフェイスの新しい可能性を探ります。
ここでは、ウェブページというよりもワークステーションのデスクトップに近い、ドラッグとサ
イズ変更の可能な内部ウィンドウを備えた完全なポータルアプリケーションを開発します。Ajax
プロセスはウィンドウの移動をバックグラウンドで追跡しているので、ユーザーがデスクトップ
から離れても、常に同じ状態に保たれます(別のマシンから再度ログインした場合も同様です)
。
第 12 章では、Ajax ベースの検索システムの開発を通じて、クライアントサイドXSLT の有用
性を紹介します。クライアントサイドXSLT は、生のXML データを書式およびスタイルの適用
されたコンテンツに変換する際に大きな威力を発揮します。
第 13 章では、バックエンド実装を持たないAjax クライアントを紹介します。このAjax クライ
アントはサーバープロセスと通信しますが、この例では、インターネット標準のRSS を使用し
て、ブログやニュースシンジケーションフィードと直接やり取りします。
最後に、読者の役に立つと思われる情報を3 つの付録として掲載しています。本書の本文で
は、Ajax 技術そのものについて説明しています。新しい分野横断的な技術の場合は、J2EE
や.NET などの成熟した技術よりも、その技術を効果的に利用するためのツールの組み合わせを
探すのが難しいことがあります。Ajax ツールを提供しているベンダはまだありませんが、今後間
違いなく出てくるはずです。それまでの参考として、付録 A では、私たちが本書のAjax プロジェ
クトを開発および整理するために使用したツールとワザの数々を簡単にまとめています。
付録 B は、ソフトウェア設計の原則は理解しているが、それをJavaScript という柔軟で構造化
されていない一風変わった言語で実践するにはどうしたらよいかわからない、というエンタープ
ライズプログラマのための資料です。ここでは、JavaScript という言語で何ができるかをひとと
おり説明し、Java やC# との大きな違いを指摘します。
ツールベンダがAjax に追いついていないので、フレームワーク開発者もまだ立ち遅れていま
す。現在、Ajax フレームワークの世界では改良が進められており、さまざまな試みや再発明が
行われています。付録 C では、現時点で私たちが把握しているAjax フレームワークとライブラ
リをまとめ、それぞれの概要と詳細情報へのリンクを掲載しています。
本書の内容 Ajax-ch00 06.5.17 19:11 ページixC
C
O N T E N T S
1.1
なぜ
Ajax
リッチクライアントなのか
. . . .
3
1.1.1 ユーザー体験の比較 . . . 3 1.1.2 ネットワークの遅延 . . . 9 1.1.3 非同期の対話 . . . 11 1.1.4 長期的な利用パターンと短期的な利用パターン . . . 14 1.1.5 ウェブに関する常識を捨て去る . . . 151.2
Ajax
の特徴となる
4
つの原則
. . . .
17
1.2.1 ブラウザが扱うのはコンテンツではなくアプリケーションである . . . 17 1.2.2 サーバーが配信するのはコンテンツではなくデータである . . . 19 1.2.3 ユーザーとの対話は滑らかで継続的である. . . 20 1.2.4 真のコーディングには規律が必要である . . . 231.3
現実世界の
Ajax
リッチクライアント
. . . .
23
1.3.1 フィールドワーク . . . 24 1.3.2 Google Maps . . . 251.4
Ajax
に代わる技術
. . . .
28
1.4.1 Flashベースのソリューション . . . 281.4.2 Java Web Startとその関連技術 . . . 29
1.5
まとめ
. . . .
30
監修者まえがき . . . iii はじめに. . . iv 本書の内容 . . . vi 謝辞 . . . xixiv
Ajax
とウェブアプリケーション
第
1
章
ウェブのための新しい設計
1
Ajax-contents 06.5.17 19:13 ページxiv1.6
参考資料
. . . .
31
2.1
Ajax
のキーとなる技術
. . . .
34
2.2
JavaScript
を使ったユーザー体験の構成
. . . .
36
2.3
CSS
を使ったルック&フィールの定義
. . . .
38
2.3.1 CSSセレクタ. . . 39 2.3.2 CSSスタイルプロパティ . . . 41 2.3.3 CSSの簡単な例 . . . 422.4
DOM
を使ったビューの編成
. . . .
48
2.4.1 JavaScriptを使ったDOMの操作 . . . 49 2.4.2 DOMノードの取得 . . . 51 2.4.3 DOMノードの作成 . . . 53 2.4.4 ドキュメントへのスタイルの追加 . . . 53 2.4.5 ショートカット:innerHTMLプロパティを使う . . . 552.5
XML
技術を使った非同期なデータのロード
. . . .
56
2.5.1 IFrame . . . 57 2.5.2 XmlDocumentとXMLHttpRequestオブジェクト. . . 59 2.5.3 サーバーへのリクエストの送信 . . . 61 2.5.4 コールバック関数を使ったリクエストのモニタ . . . 64 2.5.5 完全なライフサイクル. . . 652.6
Ajax
の真の魅力
. . . .
68
2.7
まとめ
. . . .
70
2.8
参考資料
. . . .
71
3.1
リファクタリングへ向けて
. . . .
74
3.1.1 パターン:共通のボキャブラリの作成. . . 75 3.1.2 リファクタリングとAjax . . . 76 3.1.3 バランス感覚を保つ . . . 76 3.1.4 リファクタリング イン・アクション . . . 77第
2
章
Ajax
入門
33
第
3
章
Ajax
へのリファクタリングの導入
73
Ajax-contents 06.5.17 19:13 ページxvxvi
3.2
小規模なリファクタリングのケーススタディ
. . . .
80
3.2.1 ブラウザ間の不整合:FacadeとAdapterパターン . . . 81 3.2.2 イベントハンドラの管理:Observerパターン . . . 84 3.2.3 ユーザーアクションハンドラの再利用:Commandパターン. . . 87 3.2.4 リソースへの参照を1つだけに保つ:Singletonパターン. . . 903.3
MVC . . . .
95
3.4
ウェブサーバーの
MVC . . . .
97
3.4.1 パターンを使わないAjaxウェブサーバー層 . . . 97 3.4.2 ドメインモデルのリファクタリング. . . 101 3.4.3 プレゼンテーションからのコンテンツの分離 . . . 1043.5
サードパーティのライブラリとフレームワーク
. . . .
107
3.5.1 クロスブラウザライブラリ . . . 108 3.5.2 ウィジェットとウィジェットスイート. . . 113 3.5.3 アプリケーションフレームワーク . . . 1163.6
まとめ
. . . .
119
3.7
参考資料
. . . .
120
4.1
別の種類の
MVC . . . .
122
4.1.1 さまざまなスケールにおけるパターンの利用 . . . 122 4.1.2 ブラウザにおけるMVCの適用. . . 1244.2
Ajax
アプリケーションにおけるビュー
. . . .
125
4.2.1 ビューからのロジックの分離. . . 126 4.2.2 ロジックからのビューの分離. . . 1324.3
Ajax
アプリケーションにおけるコントローラ
. . . .
136
4.3.1 従来のJavaScriptイベントハンドラ . . . 136 4.3.2 W3Cのイベントモデル. . . 139 4.3.3 JavaScriptでの柔軟なイベントモデルの実装. . . 140コアとなる技術
第
4
章
Ajax
アプリケーションとしてのページ
121
Ajax-contents 06.5.17 19:13 ページxvi4.4
Ajax
アプリケーションにおけるモデル
. . . .
145
4.4.1 JavaScriptを使ったビジネスドメインのモデル化 . . . 146 4.4.2 サーバーとの対話 . . . 1474.5
モデルからのビューの生成
. . . .
149
4.5.1 JavaScriptオブジェクトに対するリフレクション . . . 150 4.5.2 配列とオブジェクトの取り扱い . . . 154 4.5.3 コントローラの追加 . . . 1564.6
まとめ
. . . .
160
4.7
参考資料
. . . .
160
5.1
サーバーサイドでの処理
. . . .
162
5.2
サーバーサイドのコーディング
. . . .
163
5.2.1 人気のあるプログラミング言語 . . . 163 5.2.2 n層アーキテクチャ. . . 164 5.2.3 クライアントサイドとサーバーサイドのドメインモデルの維持. . . 1655.3
全体像:共通のサーバーサイド設計
. . . .
166
5.3.1 フレームワークを使わないウェブサーバーコーディング. . . 167 5.3.2 Model2ワークフローフレームワーク . . . 168 5.3.3 コンポーネントベースフレームワーク. . . 170 5.3.4 サービス指向アーキテクチャ. . . 1735.4
詳細:データの交換
. . . .
178
5.4.1 クライアントオンリーでの対話方法. . . 178 5.4.2 サンプル「プラネットブラウザ」の紹介 . . . 179 5.4.3 ウェブページのように考える:コンテンツ中心の対話方法 . . . 182 5.4.4 プラグインのように考える:スクリプト中心の対話方法. . . 185 5.4.5 アプリケーションのように考える:データ中心の対話方法 . . . 1915.5
サーバーへのデータの送信
. . . .
197
5.5.1 HTMLフォームの使用. . . 197 5.5.2 XMLHttpRequestオブジェクトの使用 . . . 199 5.5.3 クライアントからの更新を効果的に管理する . . . 2015.6
まとめ
. . . .
210
5.7
参考資料
. . . .
211
第
5
章
サーバーの役割
161
Ajax-contents 06.5.17 19:13 ページxviixviii
6.1
正しい理解:高品質なアプリケーションの構築
. . . .
214
6.1.1 応答性 . . . 215 6.1.2 堅牢性 . . . 215 6.1.3 一貫性 . . . 216 6.1.4 わかりやすさ . . . 217 6.1.5 機能させる. . . 2176.2
ユーザーに情報を知らせ続ける
. . . .
218
6.2.1 自身のリクエストに対するレスポンスの処理 . . . 218 6.2.2 別のユーザーからの更新の処理 . . . 2206.3
Ajax
用の通知システムの設計
. . . .
224
6.3.1 通知のモデル化. . . 225 6.3.2 ユーザーインターフェイス要件の定義. . . 2276.4
通知フレームワークの実装
. . . .
228
6.4.1 ステータスバーアイコンの描画 . . . 228 6.4.2 詳細な通知の描画 . . . 231 6.4.3 部品をまとめる. . . 2326.5
ネットワークリクエストでのフレームワークの使用
. . . .
239
6.6
データの鮮度の通知
. . . .
243
6.6.1 簡単な強調表示スタイルの定義 . . . 243 6.6.2 Scriptaculous Effectsライブラリを使った強調表示 . . . 2456.7
まとめ
. . . .
246
6.8
参考資料
. . . .
247
7.1
JavaScript
とブラウザのセキュリティ
. . . .
250
7.1.1 「オリジンサーバー」ポリシーの導入. . . 251 7.1.2 Ajaxで考慮すべきこと . . . 252プロフェッショナル
Ajax
第
6
章
ユーザビリティ
213
第
7
章
セキュリティと
Ajax
249
Ajax-contents 06.5.17 19:13 ページxviii7.1.3 サブドメインに関する問題 . . . 253 7.1.4 クロスブラウザのセキュリティ . . . 254
7.2
リモートサービスとの通信
. . . .
255
7.2.1 リモートサービスのプロキシ. . . 255 7.2.2 ウェブサービスでの処理. . . 2567.3
機密データの保護
. . . .
266
7.3.1 「man-in-the-middle」攻撃 . . . 266 7.3.2 セキュアなHTTPの使用 . . . 267 7.3.3 JavaScriptを使ったプレーンHTTPの暗号化. . . 2697.4
Ajax
データストリームに対するアクセスの規制
. . . .
271
7.4.1 セキュアなウェブ層の設計 . . . 272 7.4.2 ウェブデータへのアクセス制限 . . . 2767.5
まとめ
. . . .
281
7.6
参考資料
. . . .
282
8.1
パフォーマンスとは何か
. . . .
284
8.2
JavaScript
の実行速度
. . . .
285
8.2.1 アプリケーションの速度計測:ハードウェア的な方法 . . . 286 8.2.2 Venkmanプロファイラの使用. . . 291 8.2.3 Ajaxの実行速度の最適化. . . 2938.3
JavaScript
のメモリフットプリント
. . . .
306
8.3.1 メモリリークの回避 . . . 306 8.3.2 Ajaxに固有の考慮すべきこと . . . 3108.4
パフォーマンスのための設計
. . . .
316
8.4.1 メモリフットプリントの測定. . . 316 8.4.2 簡単な例. . . 321 8.4.3 結果:メモリフットプリントを150分の1に減らす方法 . . . 3268.5
まとめ
. . . .
328
8.6
参考資料
. . . .
329
第
8
章
パフォーマンス
283
Ajax-contents 06.5.17 19:13 ページxixxx
9.1
ダブルコンボスクリプト
. . . .
332
9.1.1 クライアントサイドソリューションの限界. . . 332 9.1.2 サーバーサイドソリューションの限界. . . 333 9.1.3 Ajaxベースのソリューション . . . 3349.2
クライアントサイドのアーキテクチャ
. . . .
335
9.2.1 フォームのデザイン . . . 336 9.2.2 クライアント/サーバー対話の設計. . . 3379.3
サーバーサイドの実装:
VB.NET . . . .
339
9.3.1 XMLレスポンスフォーマットの定義 . . . 339 9.3.2 サーバーサイドコードの記述. . . 3409.4
結果の表示
. . . .
343
9.4.1 XMLドキュメントの操作 . . . 344 9.4.2 CSSの適用 . . . 3469.5
高度な問題
. . . .
347
9.5.1 複数選択のためのクエリ. . . 348 9.5.2 ダブルコンボからトリプルコンボへ. . . 3499.6
リファクタリング
. . . .
350
9.6.1 改良された新しいnet.ContentLoader . . . 351 9.6.2 ダブルコンボコンポーネントの作成. . . 3569.7
まとめ
. . . .
364
10.1
動的な入力補完とは
. . . .
366
10.1.1 一般的な動的な入力補完機能. . . 366 10.1.2 Google Suggest . . . 368 10.1.3 動的な入力補完を実行中のAjax . . . 36910.2
サーバーサイドフレームワーク:
C# . . . .
370
10.2.1 サーバーとデータベース. . . 370Ajax
サンプルプロジェクト
第
9
章
動的なダブルコンボ
331
第
10
章
動的な入力補完
365
Ajax-contents 06.5.17 19:13 ページxx10.2.2 サーバーサイドコードのテスト . . . 372
10.3
クライアントサイドフレームワーク
. . . .
374
10.3.1 HTML . . . 374 10.3.2 JavaScript . . . 375 10.3.3 サーバーへのアクセス. . . 38410.4
機能の追加:異なるクエリによる複数の要素
. . . .
395
10.5
リファクタリング
. . . .
396
10.5.1 1日目:TextSuggestコンポーネントの戦略の立案. . . 397 10.5.2 2日目:クリーンで設定可能なTextSuggestの作成. . . 401 10.5.3 3日目:Ajax対応 . . . 405 10.5.4 4日目:イベントの処理 . . . 410 10.5.5 5日目:補完候補ポップアップUI . . . 416 10.5.6 リファクタリングの事後報告. . . 42510.6
まとめ
. . . .
425
11.1
進化するポータル
. . . .
428
11.1.1 従来型のポータル . . . 428 11.1.2 リッチユーザーインターフェイスを備えたポータル. . . 43011.2
Java
を使った
Ajax
ポータルのアーキテクチャ
. . . .
431
11.3
Ajax
ログイン
. . . .
433
11.3.1 ユーザーテーブル . . . 433 11.3.2 サーバーサイドのログインコード:Java . . . 434 11.3.3 クライアントサイドのログインフレームワーク . . . 43711.4
DHTML
ウィンドウの実装
. . . .
442
11.4.1 ポータルウィンドウのデータベース. . . 443 11.4.2 ポータルウィンドウのサーバーサイドコード . . . 445 11.4.3 外部ライブラリの追加. . . 44911.5
Ajax
自動保存機能の追加
. . . .
451
11.5.1 ライブラリの適合 . . . 452 11.5.2 データベースへの情報の自動保存 . . . 45411.6
リファクタリング
. . . .
457
11.6.1 コンストラクタの定義. . . 459 11.6.2 AJAXWindow.jsライブラリの適合 . . . 460第
11
章
Ajax
によるウェブポータルの機能拡張
427
Ajax-contents 06.5.17 19:13 ページxxixxii
11.6.5 リファクタリングの事後報告. . . 46811.7
まとめ
. . . .
468
12.1
検索テクニック
. . . .
472
12.1.1 従来型の検索 . . . 472 12.1.2 フレームやポップアップの手法の欠点. . . 474 12.1.3 AjaxとXSLTを使ったライブサーチの検討. . . 475 12.1.4 クライアントへの結果の返送. . . 47712.2
クライアントサイドコード
. . . .
478
12.2.1 クライアントのセットアップ. . . 478 12.2.2 処理の開始. . . 47912.3
サーバーサイドコード:
PHP . . . .
481
12.3.1 XMLドキュメントの構築 . . . 481 12.3.2 XSLTドキュメントの構築. . . 48412.4
XSLT
ドキュメントと
XML
ドキュメントの結合
. . . .
486
12.4.1 IEの処理. . . 488 12.4.2 Mozillaの処理 . . . 48812.5
検索の仕上げ
. . . .
490
12.5.1 CSSの適用 . . . 490 12.5.2 検索の改善. . . 492 12.5.3 XSLT使用の判断 . . . 493 12.5.4 Ajaxの弱点であるブックマークの克服. . . 49412.6
リファクタリング
. . . .
496
12.6.1 XSLTHelper . . . 496 12.6.2 ライブサーチコンポーネント. . . 500 12.6.3 リファクタリングの事後報告. . . 50512.7
まとめ
. . . .
506
13.1
外部の情報の閲覧
. . . .
508
13.1.1 XMLフィードについて . . . 509 13.1.2 RSSの構造. . . 510第
12
章
XSLT
を利用したライブサーチ
471
第
13
章
Ajax
によるスタンドアロンアプリケーションの構築
507
Ajax-contents 06.5.17 19:13 ページxxii13.2
リッチユーザーインターフェイスの実現
. . . .
513
13.2.1 プロセス. . . 513 13.2.2 テーブルを使わないHTMLフレームワーク . . . 514 13.2.3 CSSフォーマットの適用 . . . 51713.3
RSS
フィードのロード
. . . .
522
13.3.1 グローバルなスコープ. . . 522 13.3.2 Ajaxプリロード機能. . . 52413.4
遷移エフェクトの追加
. . . .
527
13.4.1 クロスブラウザな不透明度の規則 . . . 528 13.4.2 フェード遷移の実装 . . . 528 13.4.3 JavaScriptタイマの組み込み . . . 53013.5
付加的な機能
. . . .
532
13.5.1 追加のフィードの挿入. . . 532 13.5.2 スキップ機能と一時停止機能の組み込み . . . 53413.6
プロジェクトの制約の回避
. . . .
537
13.6.1 Mozillaのセキュリティ制約の克服 . . . 537 13.6.2 アプリケーションスコープの変更 . . . 54013.7
リファクタリング
. . . .
541
13.7.1 RSSリーダーのモデル . . . 541 13.7.2 RSSリーダーのビュー . . . 544 13.7.3 RSSリーダーのコントローラ . . . 549 13.7.4 リファクタリングの事後報告. . . 56213.8
まとめ
. . . .
562
A.1
適切なツールを使ったスマートな作業
. . . .
564
A.1.1 適切なツールの入手 . . . 564 A.1.2 独自ツールの作成 . . . 565 A.1.3 ツールキットの保守 . . . 566A.2
エディタと
IDE . . . .
567
A.2.1 コードエディタに求められるもの . . . 567 A.2.2 現在利用可能なツール. . . 569A.3
デバッガ
. . . .
574
A.3.1 デバッガを利用する理由. . . 574付録
A
Ajax
開発者向けツールキット
563
Ajax-contents 06.5.17 19:13 ページxxiiixxiv
A.3.4 独自のクロスブラウザ出力コンソールの構築 . . . 582
A.4
DOM
インスペクタ
. . . .
586
A.4.1 MozillaのDOM Inspectorの使用 . . . 586
A.4.2 IE用のDOMインスペクタ. . . 588
A.4.3 Mac OS X用のSafari DOMインスペクタ . . . 589