ひがやすを技術ブログ

電通国際情報サービスのプログラマ

Flex HTMLコンポーネント

ApolloFlex HTMLコンポーネントを使うと、Apolloアプリケーションの一部として、HTMLを貼り付けることができます。例えば、次のようにするとSeasarのサイトが表示されます。





HTMLのレンダリングには、webkit(Safariのもともとのレンダリングエンジン)が使われているそうです。上記のようにすると、ページが途中で切れてしまいますが、次のようにwidthとheightを指定するとページ全体を表示できます。


Flex HTMLコンポーネントその2

locationにfile:///C:/ファイルパスのように指定するとローカルファイルも表示できますね。



でboot.iniを表示することができました。さすがApollo、ローカルにアクセスできますね。でも、ディレクトリは表示できませんでした。そうだろうなという気はしますが。

Flex HTMLコンポーネントその3

htmlTextプロパティを使って、プログラムで動的にHTMLを貼り付けることもできます。

<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="initApp()">
    
        <![CDATA[
        public function initApp( ):void
        {
            var initXml:XML =
                
                  
                    Hello
                  
                ;
            html.htmlText = initXml.toXMLString( );
        }
	]]>
    
    

以前は、mx:TextInputなどでhtmlTextプロパティを使うことができたのですが、それがより汎用的になったということですね。

Flex HTMLコンポーネントその4

その3のhtmlのbodyタグを


のように記述すると、alertもきちんと出力されました。JavaScriptのエンジンがどこまで大丈夫なのか試しきってはいませんが、そこそこいけそうな感じです。

Flex HTMLコンポーネントその5

html上のJavaScriptからActionScriptのコードを呼び出すこともできます。基本的には、runtime.をつけるだけ。後、HTMLコンポーネントで、exposeRuntime属性をtrueにするのを忘れずに。

<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="initApp()">
    
        <![CDATA[
        public function initApp( ):void
        {
            var xml:XML =
              
                Hello
              ;
            html.htmlText = xml.toXMLString();
        }
	]]>
    
    

runtime.trace();でActionScriptのtrace()を呼び出すことができます。

Flex HTMLコンポーネントその6

ActionScriptからJavaScriptを呼び出すこともできます。HTMLコンポーネントのjavaScriptWindow属性がHTMLのwindowオブジェクトに相当するので、そいつを呼び出すだけです。




このaaa.htmlのhoge()をActionScriptから呼び出してみます。

<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml">
    
        <![CDATA[
        public function onComplete( ):void
        {
            html.javaScriptWindow.hoge();
        }
	]]>
    
    

Flex2でもJavaScriptの呼び出しにExternalInterfaceを使えましたが、JavaScriptはswfを埋め込んだHTMLに書かなきゃいけない(includeしてもたぶんOKだと思うけど試していない)など面倒なことが多かったのですが、Apolloからは簡単ですね。
ApolloのHTMLレンダリングエンジンがきちんと動くようになれば、HTMLアプリケーションのプラットフォームとしてもApolloは魅力的です。
WebのフレームワークApolloによって変わるでしょうね。

ユーザのhomeディレクトリの取得

ユーザのhomeディレクトリは次のようにして(File.documentsDirectory.parentFile.userDirectoryのほうが直接的)取得できます。

<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="initApp()">
    
        <![CDATA[
        import flash.filesystem.File;
        private function initApp() : void {
            trace(File.userDirectory.nativePath);
  	}
	]]>
    

実行した結果、


C:\Documents and Settings\li0934
と表示されました。