ActionScript 3.0 .fla文件正常工作,.swf文件导出无法正常工作

时间:2017-03-14 15:52:42

标签: csv actionscript-3 flash actionscript

我有一个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文件?

谢谢大家!

2 个答案:

答案 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来自服务器)。