AIR music store 응용 프로그램에서 원격 SWF 파일이 앨범 가격을 브로드캐스트할 수 있기를 원하지만 원격 SWF 파일에서 가격이 할인 가격인지 여부를 공개하길 원하지 않을 수 있습니다. 이를 위해서 StoreAPI 클래스에서 가격을 구하는 메서드를 제공하지만 할인 가격은 숨깁니다. 그러고 나서 이 StoreAPI 클래스의 인스턴스가 원격 SWF를 로드하는 Loader 객체의 LoaderInfo 객체에 대한
parentSandboxBridge
속성에 할당됩니다.
다음은 AIR music store에 대한 코드입니다.
<?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>
StoreAPI 객체는 주 응용 프로그램을 호출하여 일반 앨범 가격을 가져오지만
getSaleAlbumPrice()
메서드가 호출될 때 “사용할 수 없음”을 반환합니다. 다음 코드에서는 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();
}
}
다음 코드에서는 저장소의 가격을 보고하지만 할인 가격은 보고할 수 없는 PriceQuoter SWF 파일의 예를 보여 줍니다.
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());
}
}
}