AIR では、
childSandboxBridge
および
parentSandboxBridge
プロパティを、任意の子フレームの
window
オブジェクトに追加します。これらのプロパティを使用すると、親フレームと子フレームの間のインターフェイスとして機能するブリッジを定義できます。各ブリッジは一方向に移動します。
childSandboxBridge
—
childSandboxBridge
プロパティを使用すると、子フレームで親フレーム内のコンテンツにインターフェイスを公開できます。インターフェイスを公開するには、
childSandbox
プロパティを子フレーム内の関数またはオブジェクトに設定します。これで、親フレーム内のコンテンツからオブジェクトまたは関数にアクセスできます。次の例では、子フレームで実行中のスクリプトで、関数とプロパティを 1 つずつ含むオブジェクトをその親に公開する方法を示します。
var interface = {};
interface.calculatePrice = function(){
return .45 + 1.20;
}
interface.storeID = "abc"
window.childSandboxBridge = interface;
id
として
「child」
が割り当てられたインラインフレーム内に子コンテンツがある場合、フレームの
childSandboxBridge
プロパティを読み取って親コンテンツからインターフェイスにアクセスできます。
var childInterface = document.getElementById("child").childSandboxBridge;
air.trace(childInterface.calculatePrice()); //traces "1.65"
air.trace(childInterface.storeID)); //traces "abc"
parentSandboxBridge
—
parentSandboxBridge
プロパティを使用すると、親フレームは子フレーム内のコンテンツにインターフェイスを公開できます。インターフェイスを公開するには、子フレームの
parentSandbox
プロパティを、親フレーム内の関数またはオブジェクトに設定します。これで、子フレーム内のコンテンツからオブジェクトまたは関数にアクセスできます。次の例では、親フレームで実行中のスクリプトで、save 関数を含むオブジェクトを子に公開する方法を示します。
var interface = {};
interface.save = function(text){
var saveFile = air.File("app-storage:/save.txt");
//write text to file
}
document.getElementById("child").parentSandboxBridge = interface;
このインターフェイスを使用すると、子フレーム内のコンテンツで、テキストを save.txt という名前のファイルに保存できます。ただし、コンテンツはファイルシステムに対する他のアクセス権を持つことはできません。一般的に、アプリケーションコンテンツは、他のサンドボックスにできる限り範囲の狭いインターフェイスを公開する必要があります。子コンテンツは、save 関数を次のように呼び出します。
var textToSave = "A string.";
window.parentSandboxBridge.save(textToSave);
子コンテンツが
parentSandboxBridge
オブジェクトのプロパティを設定しようとすると、ランタイムによって SecurityError 例外がスローされます。親コンテンツが
childSandboxBridge
オブジェクトのプロパティを設定しようとすると、ランタイムによって SecurityError 例外がスローされます。