我有一个acrionscript swf文件的另一个问题。我正在从CSV文件中读取一些文字。我创建了fla文件,当我在animate编辑器中测试它时,它可以工作,我可以看到CSV文件中的所有文本都进入TextField。如果我导出.swf并使用Adobe Flash Player 11.4 r402运行它,我看不到CSV文件中的文本。我创建了这个fla文件,由一个摄影图组成,我编写了这段代码:
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.filesystem.*;
import flash.text.TextField;
var pathToFile:String = File.applicationDirectory.resolvePath('ex.csv').nativePath;
var requestedFile:URLRequest = new URLRequest(pathToFile);
var myTextField:TextField = new TextField();
myTextField.autoSize = TextFieldAutoSize.LEFT;
var documentLoader = new URLLoader();
documentLoader.addEventListener(Event.COMPLETE, onload);
documentLoader.load(requestedFile);
function onload(evt:Event):void
{
myTextField.text = evt.target.data;
addChild(myTextField);
}
如果我尝试在broswer中打开swf文件,我会收到此错误:
SecurityError:[SecurityErrorEvent type =" securityError" bubbles = false cancelable = false evenPhase = 2 text ="错误#2048"
如何使.swf文件正常工作?有没有办法将CSV文件中的数据读入.swf文件?
谢谢大家!
答案 0 :(得分:2)
包flash.filesystem。*是AIR运行时包。 Flash IDE在测试时模拟AIR运行时,因此它可以工作,但Flash插件和Flash Projector运行时不支持这些类。
选项1:发布AIR应用程序。
选项2:避免使用AIR类,从需要SWF解析SWF URL的同一文件夹加载数据文件:
// Objtain SWF URL.
var applicationPath:String = loaderInfo.url;
// Figure / slash or \ backslash is used as folder separator.
var systemSlash:String = (applicationPath.indexOf("\\") > -1)? "\\": "/";
// Remove SWF name from URL.
var aSplit:Array = applicationPath.split(systemSlash);
aSplit.pop();
aSplit.push("");
applicationPath = aSplit.join(systemSlash);
// Now applicationPath contains full path to the folder where SWF is.
// Use it wisely!
答案 1 :(得分:1)
这很可能是沙箱问题(安全错误)。
要知道发生了什么,当你使用像URLLoader
这样的异步类时,你应该总是监听错误(而不仅仅是COMPLETE)。
除完整的侦听器外,还添加以下侦听器:
documentLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
documentLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
并添加相应的处理程序方法:
function onIOError(e:IOErrorEvent):void {
//file not found, the event (e) will tell you the path it was trying to load and other details
trace(e);
//alert the user there was a problem
}
function onSecurityError(e:SecurityErrorEvent):void {
//file was not allowed to load, sandbox issue
trace(e);
//alert the user there a problem
}
如果您确实收到了我怀疑的安全/沙箱错误,请确保使用正确的安全沙箱设置进行发布。
转到发布设置file -> publish settings
。
您会看到标有Local playback security
的下拉列表。确保将其设置为仅访问网络,而不是仅限本地默认访问权限(如果您的CSV来自服务器)。