最近、Adobe AIRで動作するJavaScriptを書くことがありまして、その時に得た知識を投稿しておきます。AIRでJavaScriptを書いた経験のある方は常識と思いますが、AIRはセキュリティによりJavaScriptの一部機能を制限していて使用するとエラーとなります(※)。今回私が対象になったのはその中のeval関数とFunctionコンストラクタで、AIRではこの二つを使用する事ができません。どうもコードの動的生成を制限しているようです。Functionコンストラクタは関数をインライン定義(function(){...})することで大半を置換できるので問題ないですが、eval関数は代替手段がない場合が多いので困ります。
※その他の制限については下記URLに詳細が載っています。
http://livedocs.adobe.com/air/1/devappshtml/help.html?content=ProgrammingHTMLAndJavaScript_04.html#1034123
この制限への対処方法としてSandboxBridgeを使用する方法があるようです。この制限はセキュリティモデルと呼ばれており、FlashとHTMLでそれぞれ二つあります。
Flash : アプリケーションサンドボックス / 非アプリケーションサンドボックス
HTML : アプリケーションサンドボックス / クラシックサンドボックス
HTMLを例に話すとアプリケーションサンドボックスはセキュリティの厳しく、コードの動的生成などができないがAIR APIにアクセスできる。クラシックサンドボックスはセキュリティが緩く、ブラウザのようにコードの動的生成などができるがAIR APIにアクセスできないです。SandboxBridgeはクラシックサンドボックスから一部AIR APIを呼び出すものだそうで、実際は安全なアプリケーションサンドボックスで実行して、どうしてもコードの動的生成などをしたい場合はクラシックサンドボックスで実行する形にすれば良いようです。
より分かりやすい説明がウェブ上にありますので、少しリンクを貼り付けておきます。
http://blog.r-studio.jp/?itemid=62
http://weblogs.macromedia.com/akamijo/archives/2007/10/adobe_air_2_1.html
デフォルトはどちらも安全なアプリケーションサンドボックスなので、既存のライブラリをそのまま使えないことが多いですが、jQueryなど有名ライブラリが徐々にAIRへ対応しているそうなので問題はないと楽観視しています。
0 件のコメント:
コメントを投稿