Załóżmy, że aplikacja sklepu muzycznego AIR chce zezwolić zdalnym plikom SWF na rozgłaszanie ceny albumów, ale nie chce, aby zdalny plik SWF ujawniał, czy cena jest ceną sprzedaży. Jest to możliwe, ponieważ klasa StoreAPI udostępnia metodę przeznaczoną do określenia ceny, ale przysłania cenę sprzedaży. Następnie instancja tej klasy StoreAPI zostaje przypisana do właściwości
parentSandboxBridge
obiektu LoaderInfo obiektu Loader, który ładuje zdalny plik SWF.
Poniżej przedstawiono kod sklepu muzycznego AIR:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Music Store" creationComplete="initApp()">
<mx:Script>
import flash.display.Loader;
import flash.net.URLRequest;
private var child:Loader;
private var isSale:Boolean = false;
private function initApp():void {
var request:URLRequest =
new URLRequest("http://[www.yourdomain.com]/PriceQuoter.swf")
child = new Loader();
child.contentLoaderInfo.parentSandboxBridge = new StoreAPI(this);
child.load(request);
container.addChild(child);
}
public function getRegularAlbumPrice():String {
return "$11.99";
}
public function getSaleAlbumPrice():String {
return "$9.99";
}
public function getAlbumPrice():String {
if(isSale) {
return getSaleAlbumPrice();
}
else {
return getRegularAlbumPrice();
}
}
</mx:Script>
<mx:UIComponent id="container" />
</mx:WindowedApplication>
Obiekt StoreAPI wywołuje aplikację główną w celu pobrania standardowej ceny albumu, ale wywołanie metody
getSaleAlbumPrice()
powoduje zwrócenie komunikatu „Not available”. Poniższy kod definiuje klasę StoreAPI:
public class StoreAPI
{
private static var musicStore:Object;
public function StoreAPI(musicStore:Object)
{
this.musicStore = musicStore;
}
public function getRegularAlbumPrice():String {
return musicStore.getRegularAlbumPrice();
}
public function getSaleAlbumPrice():String {
return "Not available";
}
public function getAlbumPrice():String {
return musicStore.getRegularAlbumPrice();
}
}
Poniższy kod prezentuje przykład pliku PriceQuoter SWF, który zgłasza cenę sklepową, ale nie zgłasza ceny sprzedaży:
package
{
import flash.display.Sprite;
import flash.system.Security;
import flash.text.*;
public class PriceQuoter extends Sprite
{
private var storeRequester:Object;
public function PriceQuoter() {
trace("Initializing child SWF");
trace("Child sandbox: " + Security.sandboxType);
storeRequester = loaderInfo.parentSandboxBridge;
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
addChild(tf);
tf.appendText("Store price of album is: " + storeRequester.getAlbumPrice());
tf.appendText("\n");
tf.appendText("Sale price of album is: " + storeRequester.getSaleAlbumPrice());
}
}
}