问题描述
|
我正在尝试建立将一个SWF加载到另一个SWF中进行换肤的概念验证。设置是这样的:
app.fla
,具有附加的ActionScript类,AppMain.as
skin.fla
,其中包含UI组件
“ 1”显然将包含应用程序的所有逻辑;然后,我希望能够基于在特定外观中定义的实例名称来影响已加载的外观文件中包含的UI组件。
因此,例如,如果我有一个实例名称为“ 5”的“ 4”,我希望能够以编程方式在“ 1”中设置该文本字段的“ 6”属性。
导出的用于基于flashvar
参数加载皮肤文件的app.swf
将被加载到如下所示的HTML文档中:
<html>
<head>
<title>Test</title>
</head>
<body>
<div id=\"swf\"><!--//--></div>
<script src=\"jquery.js\"></script>
<script src=\"swfobject.js\"></script>
<script>
$(document).ready(function() {
$(\'#swf\').flash({
swf: \'app.swf\',width: 550,height: 400,flashvars: {
skin: \'skin.swf\'
}
});
});
</script>
</body>
</html>
这只是将app.swf
加载到#swf
<div>
中。对于如何使皮肤SWF进入我的主应用SWF的任何帮助,将不胜感激。我目前有以下内容(不起作用)。
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.net.URLRequest;
public class AppMain extends MovieClip
{
public function AppMain()
{
var myLoader:Loader = new Loader();
self.addChild(myLoader);
var myRequest:URLRequest = new URLRequest(\'skin.swf\');
myLoader.load(myRequest);
}
}
}
我要加载的皮肤很简单,因为它的背景为红色,因此我可以查看它是否已加载。它不是我要导出到的HTML页面仍具有白色背景。
我上面有错误吗? Flash Professional CS5中的控制台在“编译错误”标签下没有给我任何错误。
解决方法
我尝试对您的代码进行较小的修改,对我来说效果很好。首先检查这一行:
self.addChild(myLoader);
如果您在此处编写的代码是完整的,则不会声明self变量(但在这种情况下,您将收到“无法访问属性的访问”错误)。
如果声明了该变量,请检查是否已将其添加到显示列表中。在这种情况下,如果不添加问题,则可以重现您的问题:您看不到已加载的内容,也没有任何错误。
如果仍然不能解决问题,请尝试向您的Loader实例添加一些事件侦听器,以查看在加载过程中发生了什么。
myLoader.contentLoaderInfo.addEventListener( Event.INIT,initHandler );
myLoader.contentLoaderInfo.addEventListener( Event.OPEN,openHandler );
myLoader.contentLoaderInfo.addEventListener( Event.UNLOAD,unLoadHandler );
myLoader.contentLoaderInfo.addEventListener( Event.COMPLETE,completeHandler );
myLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR,ioErrorHandler );
myLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS,progressHandler );
myLoader.contentLoaderInfo.addEventListener( HTTPStatusEvent.HTTP_STATUS,httpStatusHandler );
myLoader.contentLoaderInfo.addEventListener( SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
如果还有其他疑问,请询问。
干杯
塔玛斯·格罗纳斯(Tamas Gronas)