
このセッションでは、Web標準技術を使ってどのようなApolloアプリケーションを開発できるのか、またHTMLとJavaScriptがApolloアーキテクチャにどのように組み込まれているのかを解説します。
Apolloは、既存のweb開発技術(Flash、Flex、HTML、Ajax)でデスクトップRIAを開発し、配布するための、クロスOSのランタイムを提供します。
特徴としては:
デスクトップにダウンロード済みの.airファイルをダブルクリックすると、インストーラが起動し、アプリケーション画面が開きます。アコーディオンタブが2つあり、tab 1でGoogleを開き、Tab 2ではSlashdotを開きます。どちらもWebページが表示されます。画面上部にあるスライダを動かし、透明度を50%にすると、ページ全体が半透明になります。この状態でもリンクは動作します。ほかに拡大・縮小や回転を加えることもできます。回転した状態でもリンクは動作します。フィルタ効果をかけることも可能で、Googleの検索ページにぼかしをかけた状態で、検索キーワードを入力すると、それでも検索結果がきちんと表示される(ぼやけた状態で)。
利用例:
ApolloのHTMLエンジンは、WebページをFlashのディスプレイオブジェクトとしてレンダリングします。HTMLディスプレイオブジェクトは、Flash内の他のディスプレイリストオブジェクトとまったく同様に振舞います。このため、フィルタ、変形、透明度などのプロパティを自由に適用することができます。開発チームでは、Flashの埋め込みフォントをHTMLのレンダリングに利用し、アンチエイリアス表示を可能にすることを検討しています。また、HTMLフォームのUIパーツは、FlexのUIパーツと同じ見え方をするようになり、両者の統一性をとる予定です。
Apolloアプリケーションの中では、JavaScriptとActionScriptオブジェクトモデルがブリッジされます。これにより、ActionScriptからHTMLのドキュメントオブジェクトモデル(DOM)に直接アクセスすることが可能になります。また、JavaScriptからFlashのディスプレイリストを操作したり、ActionScriptからJavaScriptをインスタンス化することもできます。
表示するHTMLは、ネットワーク上にあるもの、URLRequestで呼び出したもの、ActionScriptストリング、Apolloアプリケーションパッケージ内のもの、そのいずれも可能です。ActionScriptストリングとして生成されたHTMLのレンダリングが可能ということは、クライアントサイドで動的にHTMLを生成・表示することが可能ということです。また、アプリケーションパッケージ内に含めたHTMLは、「adobe-app:/」をプロトコル接頭辞としてアクセスすることにより、Apolloアプリケーションに与えられたファイルアクセス権限に関わらず、常に参照することができる予定です。
Flash画面中にHTMLを含める、あるいは逆にHTML画面中にFlashを含めることが可能で、オブジェクトモデル、セキュリティモデル、イベントモデルも統合されたものになります。
JavaScriptから、すべてのApollo APIにアクセスすることができます。ブラウザとの違いは、ウィンドウクローム(タイトルバーや枠)の見た目も完全にコントロールできる、ということです。
デモ:SpryGallery
Spryフレームワークのデモページ
Apolloは、HTMLエンジンにWebCore、JavaScriptエンジンにJavaScriptCoreを採用。どちらもWebKitオープンソースプロジェクトに含まれるもので、Apple社のSafariブラウザと同じソースコードを利用しています。
このエンジンを採用した理由は:
ただし、/Library/Frameworks/WebKit.frameworkを使っているのではなく、Adobeが独自にコンパイルをしています。理由は、特定のバージョンのWebKitを使うことで、開発者がターゲットとするHTMLエンジンを固定し、開発やQAを行いやすくするためです。また、ApolloのHTMLレンダリングエンジンがまた別のテスト対象ブラウザになってしまわないよう、なるべくWebKitのバージョンアップに沿った開発を行っていく予定です。さらに、Adobe自身、WebKitプロジェクトにコードを提供していく予定です。
サポートするのはSWFとPDFのみ。他のプラグインをサポートする予定はありません。これは、すべてのプラットフォームとデバイスにおいて同じエクスペリエンスを提供するためで、他のプラグインの多くがマルチプラットフォームをサポートしていないのもその大きな理由のひとつです。PDFの場合、Adobe AcrobatあるいはReaderがマシンにインストール済みであれば、ApolloのHTMLエンジンはReader Pluginを使ってPDFを表示します。SWFの場合は、Apolloに組み込まれたFlash Playerを使って表示されます。いっぽうで、開発チームでは、システムにインストール済みのFlash Playerプラグインを使うオプションを追加することを検討しています。
「HTMLControl」は新しいActionScriptクラスで、Spriteのサブクラスとなります。また、HTMLControlのデフォルトの振舞いは、IFRAMEを使ってFlashをHTMLページに追加するのと同様となります。
実際のコードは次のとおり:
var html:HTMLControl=new flash.html.HTMLControl();
html.width=100;
html.height=100;
addChild(html);
html.loadFromURLRequest(new flash.net.URLREquest("http://www.adobe.com"))
HTMLControlに格納されたHTMLのwindowオブジェクトには、HTMLControlのプロパティとしてアクセスします。さらに、HTMLControlを継承することで、以下のタイミングでActionScript処理を行うことができます:
HTMLは、Apolloアプリケーションウィンドウ内に表示されますが、ブラウザクローム(ツールバー、ステータスバー、ロケーションバーなど)は表示されません。HTMLコンテンツがウィンドウサイズに収まりきらない場合は、スクロールバーが表示されます。HTML表示画面以外のアプリケーションUIはすべてHTMLかFlashで作成し、表示する必要があります。JavaScript APIは、通常ブラウザ内で動作するのと同じように動作します。
JavaScriptからは、FlashまたはApolloのAPIすべてを利用することができます。例えば、JavaScriptからApolloのAPIを操作してローカルファイルシステムにアクセスすることができます。また、FlashのディスプレイリストをJavaScriptから直接操作することもできます。しかし、flash.display.DisplayObjectをDIVオブジェクトの子にすることはできません。開発チームでは、まだFlash/Apollo APIがJavaScriptオブジェクトモデルからどのようにアクセスされるべきか(window.adobe.flash.net.URLStreamなのか?)、検討している段階です。
デモ:Maptacular
Google MapsがHTMLとして開きます。カーソルをウィンドウ左端に持っていくと、その手前に、背景が半透明(背後のマップが透けて見える)なFlashのパネルが出現します。コンタクトリストです。表示されているツリーコントロールから人の名前をドラッグし、マップ上にドロップすると、すぐにその人物の住所が中央に表示されるよう、マップがスクロールします。マーカーをクリックするとFlashで作成された、背景が半透明なウィンドウが出現し、詳細を表示します。
このセッションでぜひ憶えて帰っていただきたい、Apolloの重要な点は2つです:
最後に、Apolloに関する最新の情報がWebサイトに掲載されていることを告知し、セッションは終了しました。
「Adobe Labs(英語)」
http://www.adobe.com/go/apollo/