tre*_*ree 2 air security sandbox actionscript-3
我有一个我正在研究的AIR应用程序,需要加载一个swf(总是来自localhost),它将访问它的父进程中的某些方法,反之亦然.我不关心在桌面应用程序中打开差距安全漏洞.我一直在寻找各种各样的实施,但仍然在每个实施的墙壁上.
我当前的设置加载在swf中并且它会播放但是我从沙箱中得到一个小错误,因为我与应用程序不在同一个.有谁知道如何通过这个错误,所以AIR应用程序和瑞士法郎之间有完全的自由?
*安全沙箱违规*
SecurityDomain'http://localhost/test.swf'尝试访问不兼容的上下文'app:/Test_Player.swf'
public function loadSWF():void {
//var context:LoaderContext = new LoaderContext();
//context.checkPolicyFile = true;
//context.applicationDomain = ApplicationDomain.currentDomain;
//context.securityDomain = SecurityDomain.currentDomain;
var req:URLRequest = new URLRequest(swfURL);
adLoader = new Loader();
videoCanvas.rawChildren.addChild(adLoader);
loader.contentLoaderInfo.addEventListener(Event.INIT, adLoadedHandler, false, 0, true);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError, false, 0, true);
//loader.load(req, context);
loader.load(req);
}
Run Code Online (Sandbox Code Playgroud)
您需要使用UrlLoader加载远程SWF,然后通过loadByte重新加载它.使用此方法,您将通过安全性.
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class TestDistantSwf extends Sprite
{
private var _urlLoader : URLLoader = new URLLoader;
private var _loader : Loader = new Loader;
public function TestDistantSwf()
{
addChild(_loader);
// Won't work
//_loader.load(new URLRequest("http://localhost/test.swf"));
// Load it as binary
_urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
_urlLoader.addEventListener(Event.COMPLETE, onLoad);
_urlLoader.load(new URLRequest("http://localhost/test.swf"));
}
private function onLoad(e : Event) : void
{
// Load distant swf data locally
_loader.loadBytes(_urlLoader.data, new LoaderContext(false, ApplicationDomain.currentDomain));
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要通过像闪光变种参数,双向做,如果使用空调2.6或更高版本,可以使用LoaderContext.parameters:
private function onLoad(e : Event) : void
{
var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
lc.parameters ={
foo:"hello !"
};
lc.allowCodeImport = true;
// Load distant swf data locally
_loader.loadBytes(_urlLoader.data, lc);
}
Run Code Online (Sandbox Code Playgroud)
然后在加载的SWF中使用loaderInfo.parameters获取它.
或者你可以调用加载的Swf函数:
private function onLoadBinary(e : Event) : void
{
e.target.content.init("hello 2 !");
}
private function onLoad(e : Event) : void
{
var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
lc.allowCodeImport = true;
// Load distant swf data locally
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadBinary);
_loader.loadBytes(_urlLoader.data, lc);
}
Run Code Online (Sandbox Code Playgroud)
这将从其主类中加载的swf调用:
public function init(foo : String) : void
{
trace(foo);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |