Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > onerror - не существует в Мозилле?


Автор: Иль 10.5.2005, 12:44
Ребят, а что, Лиса и Мозила не дружат с onerror для Image, как дружит с ним ИЕ, да?

Автор: Иль 10.5.2005, 13:09
Почитал рулез, действительно не дружат.

Автор: Aliance 10.5.2005, 15:55
Onerror - IE4+ и NN3+ для тега <img>

Да работает, вроде. Должен. В чем проявляется "его неработоспособность?"
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/handlers.html#1120097

Автор: Иль 10.5.2005, 20:15
Я протестил, не работает. Покрайней мере для смены src у уже загруженного изображения.
Сейчас пойду почитаю, что ты предложил
Добавлено @ 20:19
Почитал. Нда, буду выкладывать код.
Однако в руском переводе-аналоге этот текст не так явно ссылается на связь с файлом изображения.

Автор: Иль 10.5.2005, 20:34
Вот код. Перепроверил и чего-то onerror у меня не работает
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<img id="x" src="pic1.gif">
<script language="JavaScript" type="text/JavaScript">
a=new Image();//на всякий и такое изображение проверим
x.onload=function (){alert("x-onload")}
x.onerror=function (){alert("x-onerror")}
a.onload=function (){alert("a-onload")}
a.onerror=function (){alert("a-onerror")}
x.src=a.src="pic.gif"
x.src=a.src="pic1.gif"
</script>
</body></html>

Автор: Aliance 10.5.2005, 21:59
Ну начнем с того, что Mozilla (могу ошибаться) не позволяет такого.
Нельзя так обращаться к объекту, вот так нужно:
Код

var imgX = document.getElementById("x");
var imgA= document.getElementById("a");


Потом, ты представляешь, что делает это событие?
Добавлено @ 22:04
Вот, пример простой, полезный:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Test event ONERROR</TITLE>
<script type="text/javascript" language="JavaScript">
<!--
function debug() {
   alert("Ошибка!");
}
// -->
</SCRIPT>
</HEAD>

<BODY>

<IMG id="x" src="null" ALT="DEBUGING..." onerror="debug()" />

</BODY>
</HTML>


Я сам планировал сделать нечто подобное - аля циклом пробегусь по всем картинкам и если какая-то onerror - то обновляю страницу.

Автор: Иль 11.5.2005, 19:06
Цитата(Aliance @ 10.5.2005, 21:59)
Mozilla не позволяет

Пробовал, позволяет. И onload ведь срабатывает исправно.
Такое обращение в Gecko даже может быть извратнее нежели в ИЕ. Например в ИЕ можно обратится к элементу формы только через forma.inp.value, а Mozilla к этому еще позволяет inp.value, конечно если элемент inp уникальный во всем документе и нет одноименной глобальной переменной.
Цитата(Aliance @ 10.5.2005, 21:59)
Вот, пример простой, полезный

Вот я и думаю, что это не сработает в Gecko, мой пример четко показывает это.

А может можно как-то подлесть к этому событию через event или в Gecko onerror недоделанный напрочь.

Автор: Aliance 11.5.2005, 19:29
Читай ссылку выше. Там нет никаких ушемлений, не написаны.
А инфа с оф. сайта мозиллы smile

ЗЫ:
мой код не работает?

Автор: Иль 11.5.2005, 19:33
Цитата(Aliance @ 11.5.2005, 19:29)
мой код не работает?

Я не могу сказать не проверив, но думаю он не будет работать. Сейчас проверю
Добавлено @ 19:37
Да, проверил, твой код не работает в Gecko

Автор: Aliance 11.5.2005, 19:39
Попробуй убрать src вообще, сделай пустым, поставь левое значение (1.gif)
Если итак не заработает - тогда видимо что-то урезано. Точнее сказать не могу. На этой машине (где я в данный момент) нет Mozilla.
Добавлено @ 19:40
Цитата
Я не могу сказать не проверив

Как же такможно smile

Автор: Sardar 11.5.2005, 19:40
Не знал что onerror так странно себя ведёт в Мозилле... smile
Я его никогда не юзал, мне было проще поставить интервал с частотой 1с и проверять подгружаемые картинки. Но это так редко используеться, в реальных проектах никогда картинки на загрузку не проверял...

Иль хорошо что ты нашёл проблему, еще лучше мы её таки порешаем без изврата smile

Автор: Иль 11.5.2005, 19:53
К стати, легко отсечь бродилки которые не воспринимают onerror и применить к ним тайминги (вот не люблю я это делать smile).

Насчет статьи. Я читал русскую ее версию (видно, что первоисточник с сайта Mozilla), так там какой-то добрый россиянин аккуратненько подправил смысл в соответствии с данным глюком для изображения.

А знаешь, в чем видимо закавыка, по сути onerror для изображения это отправка и обработка отдельного http запроса (вроде как XMLHttpRequest, но он с изображением работать не умеет). Получается Gecko отправить запрос на загрузку картинки может, а обработать его поленились научить. Отсюда похоже и уродское свойство complete в этих браузерах.

Автор: Aliance 11.5.2005, 19:57
Что очень странно. Насколько мне известно, Мозилла такой браузер, который очень придерживается стандартам и правилам.

Автор: Иль 11.5.2005, 20:00
Да, надо подумать. Вот, например, решение тестить размеры картинки, но оно не пойдет если картинки одинакового размера. А еще для стартовой загрузки пойдет тестить "натуральные размеры". Они будут равны нулю при неудачной загрузке. Не тестил пока, но может это сработает и для смены src в последующем. Я тоже только коснулся данной проблемы, бредовый сон приснился smile


Sardar, сразу спрашу твоего опыта, а то дело встало. Ты какие в этом случае тайминги ставишь, 1сек?

Все, насегодня все, подруге обещал, отключаюсь...

Автор: Sardar 11.5.2005, 20:43
Цитата
Sardar, сразу спрашу твоего опыта, а то дело встало. Ты какие в этом случае тайминги ставишь, 1сек?

В пол секунды если нужен быстрый ответ, более секунды если ты как то по особому хочешь опрделить что картинки не грузяться или юзер их отключил.


Цитата
по сути onerror для изображения это отправка и обработка отдельного http запроса (вроде как XMLHttpRequest, но он с изображением работать не умеет). Получается Gecko отправить запрос на загрузку картинки может, а обработать его поленились научить.

Да, ИЕ более правильно работает кидая исключение если картинка не найденна(404) или вышел таймаут.

Автор: Иль 12.5.2005, 09:54
Цитата(Sardar @ 11.5.2005, 20:43)
В пол секунды если нужен быстрый ответ

Нет, а вообще через какое время в среднем считать, что изображение не загружено или не существует
Цитата(Sardar @ 11.5.2005, 19:40)
порешаем без изврата

Может кто, заодно, отправит питицию разработчикам Gecko, а то я по английски свободно общатся только с девушками могу smile. Заодно сообщите им про неработающее, видимо по этой же причине, свойство complete. Т.е. при создании объекта изображения и отсутствии src уже complete=true, тоже наблюдается при src!=""

Автор: Sardar 12.5.2005, 11:20
Цитата
Заодно сообщите им про неработающее, видимо по этой же причине, свойство complete.

complete работает правильно! smile Если ты создал новую картинку, src у неё "", то complete будет true, так как всё верно, это пустая картинка, ошибок нет. Если изменить src, то потребуеться пара миллисекунд для обновления сего свойства у картинки, этои уже похоже на баг...


Цитата
Нет, а вообще через какое время в среднем считать, что изображение не загружено или не существует

Если через 40 секунд изображение не загруженно, то скорее всего оно не загрузиться никогда. Увы под модемом не сидел, могу ошибаться smile
Но что ты хочешь делать потом? Возобновить загрузку? Дык не грузиться картинка, а юзера будет доставать не останавливающаяса полоса загрузки smile

Автор: Иль 12.5.2005, 14:42
Цитата(Sardar @ 12.5.2005, 11:20)
complete работает правильно!  Если ты создал новую картинку, src у неё ""

Не работает оно правильно! Если бы хоть одно из onerror или complete работало правильно, то не создал бы я этот топик.
Sardar, я ж уже писал, я ж уже проверил не один раз.
Да, в отличие от ИЕ, если создаем картинку, то complete в Gecko будет true, но заметь, если src="", то всегда complete=false. ВСЕГДА в Gecko. Но стоит присвоить src любое значение, то complete=true. И не важно загрузилась картинка или нет, реальный адрес или нет. Хоть напиши src="privet/vsem" получим complete=true.
Добавлено @ 14:49
Цитата(Sardar @ 12.5.2005, 11:20)
Но что ты хочешь делать потом?

Сам не под модемом. Ну много можно чего сделать. Например подогнать дизинг при неудачной загрузке.

Автор: Иль 12.5.2005, 14:54
Извините, я забыл про complete код выложить
Вот, попробуйте прогоните, убедитесь
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<script language="JavaScript" type="text/JavaScript">
a=new Image();
alert("")
alert(a.complete)
a.src=""
alert("")
alert(a.complete)
a.src="neboVAlmazah"
alert("")
alert(a.complete)
</script>
</body></html>

Автор: Иль 28.5.2005, 16:55
А вот так еще подробнее, причем у меня onError вообще никак не проявляется
Попробуйте протестить у себя.
Код

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body onLoad="im()">Кликни по изображению, чтобы проверить его свойство complete:  
<script language="JavaScript" type="text/JavaScript">
function im(){
a=new Image();
alert("src не задано \n complete="+a.complete+"\n В Gecko получаем true. ИЕ в данной ситуации выдаст false."+
"\n\n true здесь спорно по определению, но можно согласится.")
document.body.appendChild(a)//вставим изображение, для тех кто любит покликать

a.onload=function (){alert("сработало событие onload")}//событие по загрузке
a.onerror=function (){alert("сработало событие onerror")}//событие при неудавшейся загрузке
a.onclick=function (){alert("опрос через событие \n complete="+this.complete)}

a.src=""
alert("src=\"\" \n complete="+a.complete+"\n Получаем false и надо false. Хоть тут работает правильно!")

a.src="etoyKartinkiNet.NeGifVoosche"
alert("src=\"etoyKartinkiNet.NeGifVoosche\" \n complete="+a.complete+"\n Правильное значение false, которое "+
"выдаст только ИЕ \n\n !!! Иногда, после редактирования, Mozilla может здесь выдать false, но достаточно перезагрузить "+
"браузер или обновить страницу и мы увидим здесь только true \n (может это глюк многозадачности)\n\n"+
"\tНе знаю как у вас, а у меня в FF и Mozilla событие onError не сработало не разу")
}
</script>
</body></html>

Какие будут мысли?

Автор: Black 28.5.2005, 21:46
Надо проверить загружаются ли картинки браузером???

Вот код:

Код

<script type="text/javascript">
color= 'no';
function change(){ color = 'yes'; }
</script>


Код

<IMG height=10 width=10 src="img.gif" onload='change();'>


Правда валидатор такой код не пройдет, т.к. onload - нестандартный обработчик для img, однако это прекрасно работает в IE and Mozilla.

И onError нам не нужен. Мы пойдем другим путем!!!

Автор: Sardar 28.5.2005, 22:20
А хочешь сейчас будет просветление переходящее в нирвану? smile
Открой в мозилле: http://sardar.vingrad.ru/img_test.htm
Код не менял. На локалке глючит, а из сети усё нормально, Лиса 1.0.4

Автор: Иль 30.5.2005, 19:59
Попробую. Минус мне, я ж из сети не тестил. Всамом деле, мало ли какое там у Gecko чудо забубонено.
Добавлено @ 20:09
Цитата(Sardar @ 28.5.2005, 22:20)
А хочешь сейчас будет просветление переходящее в нирвану?

Я в нирване! Спасибо что не лень и догадался протестить online!
Sardar, а чего-то в Gecko проблема с кодировкой. Все время на заподноевропейскую сваливается.

Побегу на форум Mozilla, срочно сообща там эту новость.

Как думаешь, если сервер на одной локалке с пользователями этой траблы тоже не будет?

Автор: Sardar 31.5.2005, 00:07
В первых это оффтоп, во вторых такая лажа и в ИЕ, в третьих в заголовках ответа нашёл:
Код
Content-Type: text/html; charset=iso-8859-1

Видать бродилки больше любят заголовочную инфу, чем meta...

Автор: Иль 31.5.2005, 06:30
Цитата(Sardar @ 31.5.2005, 00:07)
В первых

Не вопрос, в следующий раз просто промолчу smile и в ИЕ этой лажи нет

Автор: Sardar 31.5.2005, 14:18
Цитата
Не вопрос, в следующий раз просто промолчу

Не верный полёт мысли smile создавай новый топик smile

Цитата
и в ИЕ этой лажи нет

У меня есть, IE6.0. Но как уже сказал, возможно дело в заголовке Content-type, что сервак отсылает...

Автор: Иль 31.5.2005, 15:17
Цитата(Sardar @ 31.5.2005, 14:18)
Не верный полёт мысли

Sardar, извини, я не то имел ввиду. Я понимаю, что мальца нарушаю правила форума, но я просто не всегда могу позволить лишние 5 минут и завести новый топик, который, похоже, надо делать не в JS (тем более, я кроме JS никуда не хожу и ничего не вижу - запал smile). Получется, заметив что-то, придется закрыть на это глаза из-за правил и времени.

Автор: Иль 22.6.2005, 17:13
Не все так славно в датском королевстве.

Всеравно облом!!!

Покликайте по незагруженному изображению в FF получаем complete=true. Это что еще за ересь такая?
Все, я ушол в осадок! Надоело, делаю средствами JS!

Вот для скорости: http://illvin.narod.ru/gecko/complete.html

Автор: Zaman 24.6.2005, 16:25
так же можно использовать конструкцию
Код

try
{
  // выполняем действия, которые могут вызвать ошибку
}
catch(e)
{
  // если есть ошибка то обрабатываем сдесь
}


работает как и в IE (5.0) так и в NN (6.0)

Автор: Иль 24.6.2005, 17:43
Zaman, извини, пристану с распросами smile
Как это применимо к изображениям?

Автор: Sardar 24.6.2005, 19:18
Zaman картинки исключений не кидают. Впрочем это хорошо, не обычно было бы если браузер останавливался с ошибкой при каждой не загруженной картинке smile

Автор: Zaman 25.6.2005, 11:52
не знал что не кидают, мало работал с картинками smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)