不确定我尝试做的事情是否可行。我需要加载一个swf,并让加载的swf本身在运行时加载一个json文件。
作为一种替代方案,我是否可以在加载后用json"注入"已加载的swf??
这是加载的swf和json文件的完整代码。它只是加载一个JSON文件,并使用它来填充一个textField。它独立运行很好。。。
package
{
import flash.display.*;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import com.greensock.*;
public class DynamicTextSWF extends MovieClip
{
public var marquee : MovieClip;
private var _loader:URLLoader = new URLLoader();
private var _request:URLRequest = new URLRequest();
public function DynamicTextSWF()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
private function onAdded(e:Event):void {
_request.contentType = "application/json";
_request.url="config.json";
_loader.load(_request);
_loader.addEventListener(Event.COMPLETE,loadConfirm);
_loader.addEventListener(Event.COMPLETE,decodeJSON);
TweenLite.to(marquee,12,{x:stage.stageWidth,delay:2 });
}
private function loadConfirm(e:Event):void {
trace("Load Successful" + "n");
}
private function decodeJSON(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
trace(loader.data.toString() + "n");
var result:Object = JSON.parse(loader.data);
trace('result..content.description ='+result.content.description);
marquee.info.text = result.content.description;
}
}
}
这是json文件
{
"name": "ticker0",
"content": {
"type": "text",
"description": "This is ticker text that is loaded dynamically",
"required": true
},
"tween": {
"type": "x",
"duration": 4,
"delay": 2
},
"style": {
"font": "Futura",
"color": "blue",
"size": 12
}
}
您应该能够将任意数量的SWF加载到彼此中,然后再将其他资产加载到它们中,所以我认为您需要计算出当将DynamicTextSWF类加载到另一个SWF时,它在什么时候失败。
假设你有办法看到跟踪语句,我会在DynamicTextSWF构造函数中放更多的跟踪语句,一个放在它的onAdded方法中,看看它能走多远——DynamicTextDWF实例是否添加到了后台?。按照建议,我还将为IOErrorEvent.IO_ERROR添加一个带有另一个跟踪语句的侦听器。
我使用了一个名为Vizzy的工具,它允许我在Flash调试播放器的浏览器中播放时查看Flash调试内容的跟踪输出。这还允许您查看Flash Player策略日志,该日志会显示哪里出现了安全错误。
我还使用了一个名为Charles的工具,它可以让你查看网络请求(有点像Chrome DevTools中的网络面板,但它做了很多有用的事情)-这可以让你看到是否有任何404请求,如果你的SWF在错误的URL上请求JSON数据。