单击另一个符号内的符号时出现“Actionscript Security Sandbox Violation”

时间:2013-05-27 16:30:03

标签: actionscript-3 flex actionscript air

我正在开发一个加载SWF文件的AIR应用程序。我将加载的SWF文件中的符号添加到FLEX-canvas:

//...
_loader = new Loader();
var urlReq:URLRequest = new URLRequest(_file);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadCompleted);
_loader.load(urlReq);
//...

private function swfLoadCompleted(loadEvent:Event):void 
{
        var swfApplicationDomain:ApplicationDomain = (loadEvent.target.applicationDomain as ApplicationDomain);
        var symbolNames:Vector.<String> = swfApplicationDomain.getQualifiedDefinitionNames();

        for each (var symbolName:String in symbolNames)
        {
                var clazz:Class = swfApplicationDomain.getDefinition(symbolName) as Class;
                var symbol:Object = new clazz();
                if (symbol is MovieClip)
                {
                    canvas.addChild(symbol);
                }
        }
}

当我点击符号的一部分时,我会得到错误:

*** Security Sandbox Violation ***
SecurityDomain 'file:///C:/Users/user1/Desktop/Symbol_in_symbol_example.swf' tried to access incompatible context 'app:/MyProgram.swf'

由于这个错误,我不能为这种符号实现拖放。造成这个问题的原因是什么?

我附上SWF-file example

1 个答案:

答案 0 :(得分:1)

如果要将类从一个swf文件加载到空中应用程序,则必须分两步加载它。

  1. 使用URLLoader
  2. 将swf文件加载为字节
  3. 创建普通装载程序
  4. 创建一个加载器上下文类
  5. 设置属性allowCodeImport = true
  6. 使用loadbytes
  7. 加载数据

    编辑: 找到了这个答案AIR Loading server hosted swf into same sandbox