【问题标题】:AS2: LoadMovieClip.onError doesn't seem to catch some errorsAS2:LoadMovieClip.onError 似乎没有发现一些错误
【发布时间】:2010-03-29 18:24:38
【问题描述】:

我有一些通过 HttpHandler 打开 SWF 文件的 AS2 代码。

我正在尝试让程序识别请求的文件何时丢失。

我的第一次尝试涉及使用 LoadVars 和“加载”,并且仅在文件成功加载时才调用 loadMovie(在此处的某处找到该技术)。但是,我发现当文件确实存在时,HttpHandler 中的 ProcessRequest 函数被调用了两次。有意义 - 一次用于加载,一次用于 loadMovie。

现在我改用 MovieClipLoader(也在这里找到了这种技术)。无论是否找到文件,这种方式都只会调用一次 ProcessRequest。但我的问题是 onLoadError 函数只有在我给它一个错误的 URL 时才起作用。如果我给它一个好的 URL 将错误的文件名传递给处理程序,处理程序会抛出一个错误,但我的 onLoadError 函数似乎没有识别出有问题 - 我只是得到一个应该显示错误消息的空白区域起来。

这是相关的 AS2 代码:

function CheckFileExists(inFile) {

    var mclListener:Object = new Object();
    mclListener.onLoadError = function(target_mc:MovieClip, err:String){
         if(err=="URLNotFound")
         {
             target_mc.createTextField("error_txt", 1, 0, 0, 100, 20);
             target_mc.error_txt.autoSize = "left";
             target_mc.error_txt.text = "URL not found: \n\t" + target_mc._url;
         }
         else //I would expect this block to handle the error, since the URL is good.
         {
             target_mc.createTextField("error_txt", 1, 0, 0, 100, 20);
             target_mc.error_txt.autoSize = "left";
             target_mc.error_txt.text = "some other problem: \n\t" + target_mc._url;
         }
    }

    var mcl:MovieClipLoader = new MovieClipLoader();
    mcl.addListener(mclListener);
    var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
    mcl.loadClip(inFile, mc);
}

帮助不大?

【问题讨论】:

    标签: flash actionscript-2 onerror moviecliploader


    【解决方案1】:

    您的服务器函数如何引发错误?确保它返回一个实际的 HTTP 错误代码,如 404 或 503 之类的。如果它以文本消息的形式返回带有错误的 HTTP 状态代码 200,则 Flash 不知道这是一个错误。它只是看到状态 200 并认为加载正常,并尝试将数据加载为 Flash 电影。

    【讨论】:

    • 一个 catch 块得到一个“找不到文件...”异常,但我没有用它做任何事情。出于某种原因,这足以触发带有错误 URL 的 AS2 onLoadError 函数中的错误,但不适用于错误的文件名。我缺乏错误处理技能。我将如何返回我想要的 HTTP 错误代码?我需要以某种方式将其写入 HttpContext.Response 吗?感谢您的帮助。
    • 这似乎可以解决问题(在 catch 块中): context.Response.StatusCode = 404;有没有一种很好的方法来识别进入“catch(Exception ex)”的错误类型并相应地设置状态码?
    • 没关系..我可能应该自己解决这个问题。再次感谢您的帮助,davr。我试图“投票”你的答案,但看起来我无法做到没有 15 名声望(我是新来的)。希望其他人可以投票,因为您的回答确实解决了我的问题。
    • 是的,我不知道 .NET,所以我无法帮助您了解该代码的细节,我只是描述了问题的一般原因
    猜你喜欢
    • 2011-10-24
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多