|
以前「Adobe AIR で、Ajax のライブラリがバシバシ使える」という感じの記事を書いたのですが、正式版 1.0 (英語版)になってから、久々に試してみたら、なんか、eval() が使えない感じです。 ExtJS も jQuery もなんか eval でセキュリティエラーみたいなのが出てしまいます。ウ具体的には、"Error: Adobe AIR runtime security violation for JavaScript code in the application security sandbox (eval)" というもの。 それで、資料を探して読みました。すると、AIR のセキュリティの機能で、動作モードが2つあることが分かりました。 1つめは、デフォルトモード。これは、Application sandbox と呼ばれるもので、AIR の API~ローカルファイルへのアクセスなど~がバシバシ使えます。しかし、その反面、JavaScript の eval() などのダイナミックな機能が制限されています。 もう1つは、HTMLの互換性重視モード。これは、Non-application sandbox と呼ばれるもので、セキュリティに厳しく、AIR APIは使えません。しかし、その代わり、JavaScript の eval() などのダイナミックな機能が利用可能です。 後者の Non-application sandbox に切り替えるには、iframe を使って、どのサンドボックスに属するのかということを明示します。
<iframe id="UI"
src="non-application-sandbox.html"
sandboxRoot="http://example.com/"
documentRoot="app:/">
</iframe>
AIR では、この2つのモードを使い分けるのが、重要なテクニックになりそう。精進しなくては!! また、Non-application sandbox から、AIR API を使う時は、橋渡しとなる関数を window オブジェクトに定義しておく方法があります。詳しくは以下をチェックしてみてください。
上記からの抜粋: iframe の親
var interface = {};
interface.save = function(text){
var saveFile = air.File("app-storage:/save.txt");
//write text to file
}
document.getElementById("child").contentWindow.parentSandboxBridge = interface;
iframe の子 var textToSave = "A string."; window.parentSandboxBridge.save(textToSave); 参考
コメント→コメント編集
|