Actionscript 3 URLRequest或Loader在某些计算机上不工作?
所以我的问题可能有点大,但我不确定。我正在为客户端创建一个自定义的flash照片查看器,该客户端使用Loader对象动态加载图像。它接受服务器上指定目录中的文件夹名称,并调用php页面(使用URLRequest)以获取文件夹的可用内容。然后从该数组中加载它 问题是:它在我的机器和我测试过的每台机器上都能正常工作,但在我客户的机器或他的一些客户的机器上却不能工作。屏幕底部的加载器栏没有开始填充,这意味着图像甚至没有开始加载,状态栏指示它继续等待服务器的加载,但从未完成等待。这在一台机器上是一致的,但在不同的机器上是不同的 我已经添加了diagnostics(一个我用来跟踪某些变量和收集错误的自定义类)来捕获任何错误,但它在我的客户机上不报告任何内容。我已经添加了flash版本检查代码,所以一个较低版本弄乱它的可能性已经消失了 我想我的问题是,有没有什么(安全、环境等)我可能忽略了,不允许请求对象或某些东西在某些机器上工作??我一直在想办法解决这个问题 我的代码(相关章节):Actionscript 3 URLRequest或Loader在某些计算机上不工作?,actionscript-3,flash,flashplayer-10,Actionscript 3,Flash,Flashplayer 10,所以我的问题可能有点大,但我不确定。我正在为客户端创建一个自定义的flash照片查看器,该客户端使用Loader对象动态加载图像。它接受服务器上指定目录中的文件夹名称,并调用php页面(使用URLRequest)以获取文件夹的可用内容。然后从该数组中加载它 问题是:它在我的机器和我测试过的每台机器上都能正常工作,但在我客户的机器或他的一些客户的机器上却不能工作。屏幕底部的加载器栏没有开始填充,这意味着图像甚至没有开始加载,状态栏指示它继续等待服务器的加载,但从未完成等待。这在一台机器上是一致的,
publicstaticconstloadlimit:int=4;
公共变量paramObj:对象;
私有var imageRequests:Vector。;
私有变量loaderObj:Vector。;
私有变量nextToLoad:int=-1;
//...
公共函数播放器(){
//...
paramObj=loaderInfo.parameters;
如果(!paramObj.root)paramObj.root=”http://site.com/images/";
paramObj.imgloc=paramObj.imgloc;
var res=引导时间(paramObj.imgloc);
if(res是字符串){
loadErrorMsg.text=res;
loadErrorMsg.visible=true;
log.log(res);
}
//...
}
专用函数bootstrapImages(imgloc:String):*{
试一试{
如果(!imgloc)返回“未指定图像位置”;
var-req:URLRequest=new-URLRequest(paramObj.root+“getdirlist.php?name=“+imgloc”);
变量加载器:URLLoader=新的URLLoader();
loader.addEventListener(Event.COMPLETE,directoryLoaded);
loader.addEventListener(IOErrorEvent.IO_ERROR,函数(例如:IOError){
loadErrorMsg.text=“检索唱片集数据时出错。”;
loadErrorMsg.visible=true;
log.log(ex);
});
加载程序(req);
}捕获(例如:错误){
log.log(ex);抛出ex;
}
}
私有函数目录已加载(e:事件){
试一试{
//目录将以json数组的形式出现
跟踪(如目标数据);
试一试{
var项:Array=JSON.decode(e.target.data);
}捕获(例如:错误){
trace(例如getStackTrace());
loadErrorMsg.text=“分析相册数据时出错。”;
loadErrorMsg.visible=true;
log.log(ex);
返回;
}
如果(items.length==0){
loadErrorMsg.text=“无效的相册名称”;
loadErrorMsg.visible=true;
log.log(“项目长度为0”);
返回;
}
imageRequests=新向量。();
loaderObj=新向量。();
对于每个(变量项:项中的字符串){
push(新的URLRequest(paramObj.root+“coffeeimages/”+paramObj.imgloc+“/”+item));
loaderObj.push(空);
}
//…显示用户界面。。。
对于(变量i:int=0;i=loaderObj[0]。contentLoaderInfo.ByTestTotal){
跟踪(loaderObj[0].contentLoaderInfo.bytesLoaded,loaderObj[0].contentLoaderInfo.ByTestTotal);
loadErrorMsg.visible=false;
播放幻灯片(真实);
}
}
跟踪((e)?e.target:null,loaderObj);
nextToLoad++;
if(nextToLoad>=imageRequests.length)返回;
var r:URLRequest=imageRequests[nextToLoad];
var l:Loader=new Loader();
l、 contentLoaderInfo.addEventListener(Event.COMPLETE,imageLoaded);
l、 contentLoaderInfo.addEventListener(IOErrorEvent.IO_错误,函数(例如:ErrorEvent){
loadErrorMsg.text=“分析图像数据时出错。”;
loadErrorMsg.visible=true;
log.log(ex);
});
l、 荷载(r);
loaderObj[nextToLoad]=l;
log.addObjectWatch(l);
}捕获(例如:错误){
log.log(ex);抛出ex;
}
}
也。Ctrl+Alt+Home将显示我的诊断面板。如果这对你也不起作用,请告诉我,这样我可以更担心这个…:/谢谢
编辑:我添加了更多调试信息。事实证明,在无法加载该相册的计算机上,当尝试引导相册信息时,会返回HTTP状态0。我不知道这意味着什么…我注意到了一些事情,您只在收听Event.COMPLETE和IOErrorEvent.IO_ERROR。我还建议您收听HTTPStatusEvent.HTTP_STATUS,Event.OPEN,虽然我还没有在中添加它们,但如果您仍然没有取得任何进展,它们可能会提供有用的信息 如果只加载图像,则不需要LoaderContext对象
public static const LOADLIMIT:int = 4;
public var paramObj:Object;
private var imageRequests:Vector.<URLRequest>;
private var loaderObj:Vector.<Loader>;
private var nextToLoad:int = -1;
//...
public function Player(){
//...
paramObj = loaderInfo.parameters;
if (!paramObj.root) paramObj.root = "http://site.com/images/";
paramObj.imgloc = paramObj.imgloc;
var res = bootstrapImages(paramObj.imgloc);
if (res is String){
loadErrorMsg.text = res;
loadErrorMsg.visible = true;
log.log(res);
}
//...
}
private function bootstrapImages(imgloc:String):*{
try{
if (!imgloc) return "No image location specified";
var req:URLRequest = new URLRequest(paramObj.root+"getdirlist.php?name="+imgloc);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, directoryLoaded);
loader.addEventListener(IOErrorEvent.IO_ERROR, function(ex:IOError){
loadErrorMsg.text = "Error retreiving album data.";
loadErrorMsg.visible = true;
log.log(ex);
});
loader.load(req);
} catch (ex:Error){
log.log(ex); throw ex;
}
}
private function directoryLoaded(e:Event){
try{
//directory will come down as a json array
trace(e.target.data);
try {
var items:Array = JSON.decode(e.target.data);
} catch (ex:Error){
trace (ex.getStackTrace());
loadErrorMsg.text = "Error parsing album data.";
loadErrorMsg.visible = true;
log.log(ex);
return;
}
if (items.length == 0){
loadErrorMsg.text = "Invalid album name";
loadErrorMsg.visible = true;
log.log("Items length is 0.");
return;
}
imageRequests = new Vector.<URLRequest>();
loaderObj = new Vector.<Loader>();
for each(var item:String in items){
imageRequests.push(new URLRequest(paramObj.root+"coffeeimages/"+paramObj.imgloc+"/"+item));
loaderObj.push(null);
}
//...show UI...
for (var i:int = 0; i < LOADLIMIT; i++){
imageLoaded(null);
}
} catch (ex:Error){
log.log(ex); throw ex;
}
}
private function imageLoaded(e:Event){
try{
//if this was called as a result of the load event, start the slideshow! :D
if (e != null && e.target != null) {
//stage.addChild((e.target as LoaderInfo).loader);
trace(loaderObj[0]);
if (loaderObj[0] != null && //if the first image is loaded
loaderObj[0].contentLoaderInfo.bytesLoaded >= loaderObj[0].contentLoaderInfo.bytesTotal){
trace(loaderObj[0].contentLoaderInfo.bytesLoaded, loaderObj[0].contentLoaderInfo.bytesTotal);
loadErrorMsg.visible = false;
playSlideshow(true);
}
}
trace((e)?e.target:null, loaderObj);
nextToLoad++;
if (nextToLoad >= imageRequests.length) return;
var r:URLRequest = imageRequests[nextToLoad];
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(ex:ErrorEvent){
loadErrorMsg.text = "Error parsing image data.";
loadErrorMsg.visible = true;
log.log(ex);
});
l.load(r);
loaderObj[nextToLoad] = l;
log.addObjectWatch(l);
} catch (ex:Error){
log.log(ex); throw ex;
}
}
public static const LOADLIMIT:int = 4;
private var paramObj:Object;
private var imageRequests:Vector.<URLRequest>;
private var loaderObj:Vector.<Loader>;
private var nextToLoad:int = -1;
public function Player(){
paramObj = loaderInfo.parameters;
//what is this all about, your backup URL is useless?
if (!paramObj.root) {
paramObj.root = "http://site.com/images/";
}
var res = bootstrapImages();
if (res.length > 0){
loadErrorMsg.text = res;
loadErrorMsg.visible = true;
//log.log kills me
log.log(res);
}
}
private function bootstrapImages():String {
try {
var req:URLRequest = new URLRequest(paramObj.root + "getdirlist.php?name=" + paramObj.imgloc);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, directoryLoaded);
loader.addEventListener(IOErrorEvent.IO_ERROR, dataIOError);
loader.load(req);
} catch (ex:Error) {
log.log(ex);
}
return "";
}
private function directoryLoaded(e:Event):void{
trace(e.target.data);
try {
var items:Array = JSON.decode(e.target.data);
} catch (ex:Error){
trace (ex.getStackTrace());
loadErrorMsg.text = "Error parsing album data.";
loadErrorMsg.visible = true;
log.log(ex);
return;
}
if (items.length == 0){
loadErrorMsg.text = "Invalid album name";
loadErrorMsg.visible = true;
log.log("Items length is 0.");
return;
}
imageRequests = new Vector.<URLRequest>();
loaderObj = new Vector.<Loader>();
for each(var item:String in items){
imageRequests.push(new URLRequest(paramObj.root+"coffeeimages/"+paramObj.imgloc+"/"+item));
loaderObj.push(new Loader());
}
for (var i:int = 0; i < LOADLIMIT; i++){
loadNextImage();
}
}
private function loadNextImage():void {
nextToLoad++;
if (nextToLoad < imageRequests.length) {
loaderObj[nextToLoad].contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
loaderObj[nextToLoad].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, dataIOError);
try {
loaderObj[nextToLoad].load(imageRequests[nextToLoad]);
}
catch (e:Error) {
log.log(ex);
}
log.addObjectWatch(loaderObj[nextToLoad]);
}
}
private function dataIOError(e:IOError):void {
loadErrorMsg.text = "IOError: " + e.errorID + " - " + e.name + ", " + e.message;
loadErrorMsg.visible = true;
log.log(ex);
}
private function imageLoaded(e:Event){
//Start the slideshow if the first image has loaded
loadNextImage();
if (e.target == loaderObj[0]) {
trace(loaderObj[0].contentLoaderInfo.bytesLoaded, loaderObj[0].contentLoaderInfo.bytesTotal);
loadErrorMsg.visible = false;
playSlideshow(true);
}
}
//crossdomain.xml
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.site.com" secure="false"/>
</cross-domain-policy>