从另一个沙箱中的内容加载外部类

时间:2010-09-10 17:49:31

标签: actionscript-3 class air load external

问题是:我有(例如)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]; 
}

1 个答案:

答案 0 :(得分:1)

我设法让我的代码正常工作。

所以这是我必须做的一切,以防其他人有同样的问题:

  1. 使用FileStream

    读取swf文件

    stream.readBytes(字节)

  2. 使用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);

  3. 确保不要在加载的swf中调用Security.allowDomain()。它不适用于AIR,正如@Focker所提到的那样。

  4. 无需使用Security.loadPolicyFile()

  5. 加载策略文件
  6. 我使用的swf文件是使用Flash CS3创建的,方法是向库中添加新的Font实例。我没有运气用[Embed]创建它们,因为结果类存储为TrebuchetMS_TrebuchetMS,而不是实际的类名,即TrebuchetMS。

  7. 我没有必要创建安全桥(LoaderInfo.childSandboxBridge)

  8. 我希望我不会忘记任何事情。