Supponete di voler fare in modo che un'applicazione AIR per un negozio di musica consenta ai file SWF remoti di diffondere il prezzo degli album, impedendo tuttavia che il file SWF remoto riveli se si tratta del prezzo di vendita. A questo scopo, la classe StoreAPI fornisce un metodo per acquisire il prezzo, nascondendo però il prezzo di vendita. Un'istanza di questa classe StoreAPI viene quindi assegnata alla proprietà
parentSandboxBridge
dell'oggetto LoaderInfo dell'oggetto Loader che carica il file SWF remoto.
Di seguito è riportato il codice dell'applicazione AIR per il negozio di musica:
<?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>
L'oggetto StoreAPI chiama l'applicazione principale per recuperare il normale prezzo dell'album, ma restituisce "Non disponibile" quando viene chiamato il metodo
getSaleAlbumPrice()
. Il seguente codice definisce la classe 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();
}
}
Il seguente codice rappresenta un esempio di file SWF denominato PriceQuoter SWF che indica il prezzo del negozio, ma non può indicare il prezzo di vendita:
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());
}
}
}