问题是:我有(例如)font embeder类,我想加载外部SWF而不是来自应用程序存储文件夹,而是另一个本地路径(“D:\ blah-blah \ 123.swf”)在AIR中,但据您了解,我无法在互联网上找到任何决定(谷歌,Adode.com)
Security.allowDomain() not working in AIR ( documented on adobe.com)
Trick with ApplicationDomain is not working ( same documented on adobe.com)
我想要的只是从加载的内容中获取 CLASS REFERENCE 并在加载启动器中使用。
有人知道如何解决这个问题吗?
列出获取熟人的代码:
_
_
[主AIR-app代码表]
// function and one param (path to content)
function tralala( _swfPath : String)
{
var l : Loader = new Loader();
l.contentLoaderInfo.
addEventListener( Event.COMPLETE,
function( _e : Event)
{
var tmp = _e.target.content;
// call function from SWF and retrieving
// classes, but can't work with them
Font.registerFont( tmp._getRef()[0]);
// no error checking for clarity
}
);
l.load( new URLRequest( _swfPath));
}
_
_
[外部SWF代码]
function _getRef() : Array
{
// class1,2,3 are font classes imported in library
return [ class1, class2, class3];
}
答案 0 :(得分:1)
我设法让我的代码正常工作。
所以这是我必须做的一切,以防其他人有同样的问题:
使用FileStream
读取swf文件stream.readBytes(字节)
使用LoaderContext
创建一个新的Loader对象并在其上加载字节var loader:Loader = new Loader(); loadercontentLoaderInfo.addEventListener(Event.COMPLETE,fontFileLoaded,false,0,true);
var context:LoaderContext = new LoaderContext(); context.applicationDomain = ApplicationDomain.currentDomain; context.allowCodeImport = true;
loader.loadBytes(bytes,context);
确保不要在加载的swf中调用Security.allowDomain()。它不适用于AIR,正如@Focker所提到的那样。
无需使用Security.loadPolicyFile()
我使用的swf文件是使用Flash CS3创建的,方法是向库中添加新的Font实例。我没有运气用[Embed]创建它们,因为结果类存储为TrebuchetMS_TrebuchetMS,而不是实际的类名,即TrebuchetMS。
我没有必要创建安全桥(LoaderInfo.childSandboxBridge)
我希望我不会忘记任何事情。