FrontPage

 

 
最新更新:

 
人気のページ:

 
最新コメント:

 
971

 

以前「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);
参考

コメント


作成:2008-03-24 02:50:06/更新:2008-07-12 12:04:37

→テキスト形式で見る

くじらぶろぐD by kujirahand RSS

konawiki