Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка в Mozilla при попытке загрузить несуществующую swf (http://www.flasher.ru/forum/showthread.php?t=117045)

Firefoxer 17.10.2008 13:25

Ошибка в Mozilla при попытке загрузить несуществующую swf
 
Выскакивает ошибка "Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.", когда флешка пытается загрузить отсутствующую на сервере другую флешку. Вопрос в том, как правильно обработать/обойти возникновение ошибки и избежать появление такого окошка в Mozilla (в других браузерах не появляется)?
Код:

var myLoader:Loader = new Loader();
var myRequest:URLRequest =  new URLRequest("...");
myLoader.load(myRequest);

Try...catch не помогли, либо неправильно использовал. Перехват IOErrorEvent вроде бы тоже никак не влияет.

Alex Lexcuk 17.10.2008 13:37

Так надо его URLLoader классом, там есть
ioErrorHandler
Код:

//куски документ класса
...
 my_url_img = "imag.jpg";
                sprite_creator();               
        }

        function menuItemSelectHandler(event:ContextMenuEvent):void {
                tool.x = mouseX;
                tool.y = mouseY+20;
        }

        //загрузочная функция
        function sprite_creator() {
                container = new Sprite();
                //addChild(container);
                loader = new URLLoader();///////////////////////////////////////////////////
                var pictURL:String = my_url_img;
                configureListeners(loader);
                var pictURLReq:URLRequest = new URLRequest(pictURL);
            try {
                loader.load(pictURLReq);
            } catch (error:Error) {
                trace("Unable to load requested document.");
            }

        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(Event.OPEN, openHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        }

        private function completeHandler(event:Event):void {
            var loader:URLLoader = URLLoader(event.target);
            trace("completeHandler: " + loader.data);
            var pictLdr:Loader = new Loader();
                    var pictURL:String = my_url_img;
                    var pictURLReq:URLRequest = new URLRequest(pictURL);
                    pictLdr.load(pictURLReq);
                    pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
                      function imgLoaded(event:Event):void {
                            container.addChild(pictLdr.content);
                                work_mc.addChild(container);
                        }
//            var vars:URLVariables = new URLVariables(loader.data);
//            trace("The answer is " + vars.answer);
//                        container.addChild(loader.content);
               
        }

        private function openHandler(event:Event):void {
            trace("openHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("httpStatusHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }

        //конец  загрузочная функция

выдает такое
Код:

httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0]
ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: file:///D|/flash/AC3/Графика%20длинная%20линия/imag.jpg"]


Firefoxer 17.10.2008 14:22

Ошибки теперь нет, но никак не хочет отображаться подгружаемая флешка. Что здесь не так:
Код:

var myLoader3:URLLoader = new URLLoader();
var myRequest3:URLRequest =  new URLRequest("...");
myLoader3.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);                       
myLoader3.load(myRequest3);
mus.addChild(myLoader3.content);


etc 17.10.2008 14:58

Alex Lexcuk, внимательно читайте то, что спрашивают, а не вываливайте сразу тонну кривого кода (пусть даже с кусками из хелпа, это не отменяет его полнейшей кривости). И вообще, когда вы уже научитесь писать грамотный и стандартизированный код, а не учить своему чудо-синтаксису с подчеркиваниями и кодингу в кадрах?

URLLoader предназначен для загрузки текста, бинарных данных и т. п., но никак не для загрузки swf/png/jpg, кроме этого, он не является DisplayObject. Firefoxer, для отлова ошибки вам нужно подписаться на соответствующее событие.

Firefoxer 17.10.2008 15:02

Подозревал я, даже в хелпе ничего про возможность загрузки swf через URLLoader нет. Благодарю за бдительность, _etc.

В первом посте ошибся, действительно подписка на соответствующее событие спасает:
Код:

var myLoader3:Loader = new Loader();
var myRequest3:URLRequest =  new URLRequest("...");
myLoader3.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
try {
  myLoader3.load(myRequest3);
  mus.addChild(myLoader3);
} catch (error:Error) {               
}                       

private function ioErrorHandler(event:IOErrorEvent):void {
}


Alex Lexcuk 17.10.2008 15:51

Ну... Да Неужели никто не читал то, что напечатал я.
URLLoader просто грузит...она не отбражает ничего, если он загрузил (см. текст выше) то уж Loader загрузит и подавно.
Найдите 10 отличий, все работает... Отображается отлично gif, jpg, swf (не важно)
Код:

//Draw_doc_class
package {
        import flash.display.*;//библиотека объектов
        import flash.events.*;//библиотека событий
        import flash.text.*;//библиотека текста
        import flash.ui.*;
        import flash.system.System;
        import flash.net.*;
        import flash.utils.*;
        import flash.ui.*;

        dynamic public class Doc_class extends Sprite{;
        var loader:URLLoader;
        var container:Sprite;
        var my_url_img:String;
        var work_mc:Sprite;
        function Doc_class() {
                work_mc = this;
                my_url_img="http://www.dnadillo.dn.ua/fla/anim-spider.swf";
                sprite_creator();
        }

        //загрузочная функция
        function sprite_creator() {
                container=new Sprite  ;
                //addChild(container);
                loader=new URLLoader  ;///////////////////////////////////////////////////
                var pictURL:String=my_url_img;
                configureListeners(loader);
                var pictURLReq:URLRequest=new URLRequest(pictURL);
                try {
                        loader.load(pictURLReq);
                } catch (error:Error) {
                        trace("Unable to load requested document.");
                }

        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
                dispatcher.addEventListener(Event.COMPLETE,completeHandler);
                dispatcher.addEventListener(Event.OPEN,openHandler);
                dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
                dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler);
                dispatcher.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
        }

        private function completeHandler(event:Event):void {
                var loader:URLLoader=URLLoader(event.target);
                trace("completeHandler: " + loader.data);
                var pictLdr:Loader=new Loader;
                var pictURL:String=my_url_img;
                var pictURLReq:URLRequest=new URLRequest(pictURL);
                pictLdr.load(pictURLReq);
                pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoaded);
                function imgLoaded(event:Event):void {
                        container.addChild(pictLdr.content);
                        work_mc.addChild(container);
                }
        }

        private function openHandler(event:Event):void {
                trace("openHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
                trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
                trace("securityErrorHandler: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
                trace("httpStatusHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
                trace("ioErrorHandler: " + event);
        }

        //конец  загрузочная функция
}
}

Даже скомпили для вас 1.2 кБ
http://www.dnadillo.dn.ua/fla/Doc_loading.swf

Firefoxer 17.10.2008 16:03

Что-то я смысл конструкции не понимаю, начинаем грузить через URLLoader, показать не можем, т.к. не является DisplayObject, как выше сказал _etc, и заново качаем через Loader? Расчет на то, что возьмет из кэша? Аналогичное событие ошибки есть и в классе Loader, которым я и воспользовался в итоге, потому мне кажется излишними и даже неприемлимым подобное использование URLLoader, хотя и соглашусь с тем, что это может работать.

Alex Lexcuk 17.10.2008 16:23

Ну так я конечно не настаиваю, однако событие в вашем примере
Код:

myLoader3.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
private function ioErrorHandler(event:IOErrorEvent):void {
}

сработает только в случае вызова функции
Код:

myLoader3.load(myRequest3);
и если вставить trace
Код:

function ioErrorHandler(event:IOErrorEvent):void {
        trace("error");
}

и попытаться загрузить, то чего на самом деле нет
то мы увидим
Код:

Error opening URL 'http://www.dnadillo.dn.ua/fla/cat_.swf'
error

Вехний Error не наш, это точно и следовательно эта конструкция на чувствительном мозиловском движке работать не будет.

Firefoxer 17.10.2008 16:35

Я собственно и успокоился потому, что мой пример работает. Ошибки в мозилле больше нет.

Alex Lexcuk 17.10.2008 17:19

Виноват... тоже попробовал, только, что, работает отлично. Если кому-понадобится
отобразить именно из URLLoader то можно так
Код:

...
loader=new URLLoader  ;///////////////////////////////////////////////////
                var pictURL:String=my_url_img;
                configureListeners(loader);
                var pictURLReq:URLRequest=new URLRequest(pictURL);
                loader.dataFormat= URLLoaderDataFormat.BINARY;
                try {
                        loader.load(pictURLReq);
                } catch (error:Error) {
                        trace("Unable to load requested document.");
                }
                txt.text = 'Прикол';

        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
                dispatcher.addEventListener(Event.COMPLETE,completeHandler);
                dispatcher.addEventListener(Event.OPEN,openHandler);
                dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
                dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
                dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler);
                dispatcher.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
        }

        private function completeHandler(event:Event):void {
                var pictLdr:Loader=new Loader;
                pictLdr.loadBytes(loader.data);
            this.addChild(pictLdr);
        }
...



Часовой пояс GMT +4, время: 09:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.