Поймать неверные URL-адреса при использовании растрового изображения EaselJS

Есть ли способ проверить, ведет ли URL-адрес к действительному изображению, прежде чем пытаться загрузить его в createjs.Bitmap? Я пытался поймать ошибку неправильного URL-адреса (в Firefox), но по какой-то причине это не работает.

    try {

        image = new createjs.Bitmap ( "image" );

    } catch ( err ) {

        console.log ( "oops" );
        return null;

    }

Когда я запускаю этот код в Firefox, ошибка по-прежнему отображается в консоли, а зарегистрированное сообщение - нет. Мой вопрос в том, есть ли способ предварительно проверить URL-адрес?


person Ben    schedule 30.03.2015    source источник


Ответы (2)


Если изображение плохое, неопределенное, пустое и т. д., это не throw будет ошибкой, поэтому try/catch ничего не сделает.

Если вы используете PreloadJS (часть пакета CreateJS) для загрузки изображения, вы можете прослушивать событие error, которое очередь выдаст, если какие-либо изображения не загрузятся (или истечет время ожидания).

var queue = new createjs.LoadQueue();
queue.on("error", handleError);
queue.loadFile("404image.png");

В настоящее время нет встроенного способа использования только необработанного экземпляра Bitmap для определения возникновения ошибки. Изображения, передаваемые по строковому пути в Bitmap, не загружаются предварительно, а просто запрашиваются внутри с использованием экземпляра изображения.

person Lanny    schedule 31.03.2015
comment
Хм, хорошо. Вроде должно работать. Спасибо. - person Ben; 05.04.2015

Вы можете просто использовать обычный JS, чтобы определить, можно ли загрузить изображение, и если да, то передать этот экземпляр EaselJS Bitmap:

var img = new Image();
img.onload = function() {
    console.log('img loaded');
    var bitmap = new createjs.Bitmap(img);
}
img.onerror = function() {
    console.log('error');
} 
img.src = 'notexistingimage.png';
person derz    schedule 01.04.2015
comment
Я пытался сделать это немного, но у меня все еще были некоторые проблемы с ошибками. - person Ben; 05.04.2015
comment
Какие проблемы? Не могли бы вы предоставить дополнительную информацию. - person derz; 05.04.2015
comment
Хорошо, я понял это. Я использовал код, который вы привели здесь, но затем я случайно вызвал stage.addChild() вне части загрузки. Итак, это не сработало. Кроме того, по-видимому, при создании растрового изображения не будет создаваться проблема с неверным URL-адресом, пока код не вызовет метод addChild. - person Ben; 06.04.2015