【问题标题】:Why don't IOErrorEvents contain the URL when running standalone?为什么 IOErrorEvents 在独立运行时不包含 URL?
【发布时间】:2014-06-05 12:30:06
【问题描述】:

这是URLLoader 的简单示例。

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://example.com/doesntexist.txt");
loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){
    textbox.text = e.toString(); // Text box on stage
});
loader.load(request);

这行为很奇怪。

从 Flash 运行或从 Flash 调试时,错误如下所示。

[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://example.com/doesntexist.txt"]

但是,当作为.swf.exe 投影仪运行时,它看起来像这样。

[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032"]

为什么会这样?有没有办法在独立时获得第一个结果?

编辑:我需要让它作为投影仪工作。

【问题讨论】:

  • 你在使用调试播放器吗?
  • 测试影片和调试影片都得到了这个。
  • 如果你右键点击电影,你有Debug选项吗?
  • 我只在从 Flash 应用程序运行影片时获取 URL,无论是通过测试影片 (Ctrl-Enter) 还是调试影片 (Ctrl-Shift-Enter)。找不到Debug 选项,它在哪里?
  • 请仔细阅读我的要求。在运行独立的.swf 时,如果右键单击电影,菜单中有Debug 选项吗?

标签: actionscript-3 flash events ioerror urlloader


【解决方案1】:

虽然我不确定原因(可能是 Flash 播放器幕后的效率问题),但这里有一种方法可以完成您想要的:

您可以编写一个扩展 URLLoader 的自定义类,为您存储 url。

package 
{
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class MyURLLoader extends URLLoader
    {
        public var request:URLRequest; //all were doing here is adding this public property and setting it when loading into the URLLoader

        public function MyURLLoader(request_:URLRequest) {
            request = request_;
            super(request);
        }

        override public function load(request_:URLRequest):void 
        {
            request = request_;
            super.load(request);
        }
    }
}

然后在处理您的错误时,您可以像这样引用 URL:

var loader:MyURLLoader = new MyURLLoader();
var request:URLRequest = new URLRequest("http://example.com/doesntexist.txt");

loader.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent){
    textbox.text = e.toString() + " URL: " + MyURLLoader(e.currentTarget).request; // Text box on stage
});
loader.load(request);

【讨论】:

  • 你在开玩笑吗?! :) 只要他创建 URLRequest,他知道 url..
  • @AndreyPopov - 如果他们正在加载 50 个东西怎么办?代码封装和可重用性如何?你知道这段代码的上下文吗?
  • 在您的情况下,最简单的解决方案是使用一个简单的对象将加载程序映射到 url,然后使用 loaders[e.target]; 获取 url。对我来说,重写这样一个类是荒谬的。
  • 问题是关于 IOErrorEvent 以及如何让它跟踪需要的内容。这是内置在 AS3 中的,并且在用于适当目的时可以正常工作 - 调试。我不明白我们是如何走到这一步来谈论封装这样的东西的:) 无论如何,我没有说你的答案是错误的,当然,它会按照你的描述工作,我只是不明白为什么需要这个,为什么你要为这么简单的事情提供如此骇人听闻的重载解决方案(我不想知道他将如何得到这个带有文本框的“跟踪”消息,真的吗?!)
  • @AndreyPopov 好吧,我刚刚看了这个,在加载器中存储请求 URL 的想法对我来说似乎很棒。我只对大约 10 个文件使用了一个错误函数,所以我真的很想获取 URL。我会这样做(尽管稍作修改以更好地适应我的项目)。
【解决方案2】:

从以下位置安装 Debugger Flash Player:http://www.adobe.com/support/flashplayer/downloads.html 这会对你有所帮助。

【讨论】:

  • 它对我有什么帮助?我无法在要运行我的应用程序的机器上安装任何东西;我必须使用投影仪。
  • 您询问如何在独立中查看完整错误。我给你解释过了。现在你想在 exe 中看到它 - 这是不同的问题。有不同的方法,但都需要外部软件,例如:demonsterdebugger.com/downloads
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2020-03-08
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多