不确定我想做的事情是否可行。 我需要加载一个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
}
}
答案 0 :(得分:0)
您应该能够将任意数量的SWF相互加载,然后将其他资产加载到它们中,因此我认为您需要确定在加载到另一个SWF时DynamicTextSWF类失败的位置。
假设您有办法查看跟踪语句,我会在ActionTextSWF构造函数中添加更多跟踪语句,并在其onAdded方法中添加一个跟踪语句,并查看它获得的距离 - 是否已添加到舞台中的DynamicTextSWF实例?。我也会按照建议为IOErrorEvent.IO_ERROR添加一个侦听器和另一个跟踪语句。
我使用一个名为Vizzy的工具,它允许我在Flash调试播放器中的浏览器中播放时查看Flash调试内容的跟踪输出。这还允许您查看Flash Player策略日志,该日志显示出现安全性错误的位置。
我还使用名为Charles的工具,它允许您查看网络请求(有点像Chrome DevTools中的网络面板,但它有更多有用的东西) - 这可以让您查看是否有任何404请求,如果你的SWF要求在错误的URL上提供JSON数据。