以前「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 を使って、どのサンドボックスに属するのかということを明示します。 {{{ }}} AIR では、この2つのモードを使い分けるのが、重要なテクニックになりそう。精進しなくては!! また、Non-application sandbox から、AIR API を使う時は、橋渡しとなる関数を window オブジェクトに定義しておく方法があります。詳しくは以下をチェックしてみてください。 -http://livedocs.adobe.com/air/1/devappshtml/help.html?content=ProgrammingHTMLAndJavaScript_10.html#1036367 -http://livedocs.adobe.com/air/1/devappshtml/security_5.html#1092959 上記からの抜粋: 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); }}} *** 参考 - Introducing the Adobe AIR security model - http://www.adobe.com/devnet/air/articles/introduction_to_air_security.html