まて、それは孔明の・・・(Adobe AIR的な意味で)
Flash & Adobe AIR
今日もAdobeAIRの続き。 今日もプログラミング関係(?)のグチなので、興味ない人はスルーお願いします。 (後10日で夏休み終了なので、普通の話題も戻る・・・かも) これからデスクトップ常駐型ソフトを作るにあたって、いくつもソフトを作ってインストールするよりも、一つのソフトにたくさん機能があって、ソフト内で選択して使う方がインストールの手間とか、不具合発生時の対応がやりやすいはず・・・。 ということで、swfファイル(AIR APIを使うもの)を動的にロードする感じで作っています。 AIRのソフトでよく使うディレクトリに、「インストール先」「プライベート記憶領域(*1)」があって、インストール先は書き換え不可なのでこっちには外から持ってきたファイルを置けません。
| \ | インストール先 | プライベート記憶領域 |
| 読み込み | ○ | ○ |
| 書きこみ | × | ○ |
*** セキュリティ Sandbox 違反 ***
SecurityDomain 'app-storage:/○○.swf' が互換性のないコンテキスト 'app:/××.swf' にアクセスを試みました。
SecurityError: Error #2070: セキュリティサンドボックス侵害 : 呼び出し元 app-storage:/○○.swf は app:/××.swf が属するステージにアクセスできません。
「クロスドメインなら、Security.allowDomainで解決だ!」と思い、やってみるも例外が投げられて無効。 リファレンスをよく見てみると・・・・
メモ : このメソッドを AIR アプリケーションサンドボックス内のコードから呼び出すと、SecurityError 例外がスローされます。アプリケーションセキュリティドメイン外のコンテンツは、アプリケーションサンドボックスのコンテンツを直接クロススクリプトできません。ただし、アプリケーションサンドボックス外のコンテンツは、サンドボックスブリッジを使用してアプリケーションセキュリティサンドボックスのコンテンツと通信できます。
っということで、サンドボックスブリッジを使うことに。
サンドボックスブリッジはLoaderInfoのparentSandboxBridge, childSandboxBridgeプロパティを経由すれば、プロパティやメソッドをクロスドメインでも公開できるというもの。
んで、これを使ってみたんですが、どの部分で二つのプログラムを切っても、この一点を使ってアクセスしなければならない箇所が大量に出てきて、機能が制限されるか、非常に面倒なプログラムになってしまうと判断しました。
・・・そういうことで、インストール簡略化は断念。
ActionScriptのまだ知らない部分が多くて、こんな感じで計画通りに進まなくなることはよくあります。
(*1):Windowsの場合は、C:\Documents and Settings\(ユーザー名)\Application Data\com.adobe.example.(ソフト名)\Local Storeらしい。
一部設定により変更可で、アンインストール時には自動で削除されない。
(*2):LocalConnectionクラス使ってこっそりやり取りするとか・・・
(*3):悪意のあるプログラマがいないのが前提・・・とある意味危ないこと言ってます
最終更新: 2023/05/07 16:49


