Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№112-05-2005 10:50:21

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Недоделка, глюк или DOM. onerror и свойство complete для изображений

Пишу, рассчитывая на ваше знакомство с DOM и JS, и потому что не знаю, куда еще писать.

Чего хочу - устранения данного нечеловеческого глюка во всем семействе Gecko или понять, почему такой облом есть на земле :).

У меня есть такое правило - то, что работает в Gecko, то правильно.
Даже рассмешил прочитанный на форуме топик, где спрашивалось, почему не работает в JavaScript (JS) обращение к форме через имя в круглых скобках. Такого изврата еще не встречал :). И, не смотря на реализацию некоторых объяснимых вывихов от W3C, приятно наблюдать исключения, которые делаются в Gecko для людей или для выживания :) (innerHTML, возможность обращение к элементам не только через getElementById, XMLHttpRequest и др.)
Но вот появилась проблема.

Суть проблемы:
Событие onerror для изображений в семействе Gecko не существует как таковое (хотя документировано). По этой же, видимо, причине свойство complete у изображений существует в браузерах данного семейства как фикция или заглушка, чтобы прикрыть неработающую функциональность. Не понимаю с чем связано такое пренебрежение, ведь уже 2005 год :).
Согласитесь, ненормально, когда задается документированное вроде для изображения событие onerror, а реакция на него нулевая. В еще больший ступор впадаешь, когда свойство complete получает значение true лишь оттого, что SRC изображения не равно пустой строке. И даже при отсутствии SRC complete=true. Мракобесь!

Оставим Оперу тем, кто любит ждать, терпеть и догонять (там и в ИЕ как раз все работает), но в Gecko такого быть не должно.
Считаю данный глюк очень серьезным, особенно когда наблюдаемая в сети интерактивность сайтов перестанет быть детской. И тут не получится ссылаться на DOM или какие-либо причины, сия фича должна работать.

Видимая причина глюка – браузеры семейства Gecko умеют посылать запрос на загрузку изображения, но никак его не обрабатывают. Видимо это просто забыли запрограммировать. Выглядит это странно на фоне реализации в Gecko XMLHttpRequest.

Что приходится на данный момент делать - отсеивать все браузеры семейства Gecko и утяжелять код JS таймингами и проверками – тобишь в кривую обходить данную недоделку. Умел бы XMLHttpRequest работать с изображениями - не вопрос, сами бы реализовали.

Методы решения - посоветуйте, куда писать по этому вопросу, может и исправят со временем.

PS. 1.В случае неточностей и заблуждений прошу проявить снисходительность :).
2.Если есть желание посмотреть (пощупать) данный глюк вживую и проверить мои слова, могу выложить элементарный иллюстрирующий код.
3.Извините за затянутость, форум-то не программистский.

Отредактировано Иль (12-05-2005 10:53:38)

Отсутствует

 

№212-05-2005 16:24:39

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Выложу проблемный код, чтоб вы могли сообразить, что к чему наверняка.
Попробуйте прогнать в FF и ИЕ и ощутите разницу.
В нем, в отличие от ИЕ, никак не проявляется событие onerror, а свойство complete ведет себя так, что встает вопрос, зачем оно вообще нужно в семействе браузеров от Gecko.

Насчет, как здесь принято говорить, "мусорного" обращения к элементам не беспокойтесь, с document.getElementById таже ситуация.

Выделить код

Код:

<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 Получаем 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 (это глюк многозадачности)")
}
</script>
</body></html>

Отредактировано Иль (20-05-2005 14:49:01)

Отсутствует

 

№312-05-2005 21:59:12

alc
Участник
 
Группа: Extensions
Откуда: Чебоксары
Зарегистрирован: 02-03-2005
Сообщений: 296

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

А так?

Выделить код

Код:

a=new Image();
a.addEventListener ( 'load' , function(event){alert('Загружено');} , false );
a.addEventListener ( 'error' , function(event){alert('Ошибка');} , false );
a.src='http://blablabla/blablabla.jpg';

P.S. Форумы xpoint.ru для решения проблем хороши (imho)

Отредактировано alc (12-05-2005 22:00:39)


Бди!

Отсутствует

 

№412-05-2005 22:08:18

alc
Участник
 
Группа: Extensions
Откуда: Чебоксары
Зарегистрирован: 02-03-2005
Сообщений: 296

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Кстати, для событий в XMLHttpRequest(nsIXMLHttpRequest) сделали специальный интерфейс - nsIJSXMLHttpRequest ;)


Бди!

Отсутствует

 

№512-05-2005 23:42:34

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Спасибо ребята, разбирусь завтра, но я не один такой, нас много и у всех этот глюк

Отсутствует

 

№612-05-2005 23:59:00

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Абрамыч, какой ты хитрый! А ты знаешь что получил старые значения свойства complete. Не меняй код. Я не просто так расставил пустые alert. Браузер штука многозадачная и не успевает сменить свойство, а ты его уже опросил. Может ты не знал, но пустые alert имитируют  задержку загрузки через инет.

Форумы xpoint.ru для решения проблем хороши

Чур не меня. Упаси бог от xpoint.ru. Только не он. :o

Так что повторяю для всех, кто обрадовался. Проблема не решена.

А вот насчет onerror завтра обмозгую и попробую с ребятами другие релизы

Отсутствует

 

№713-05-2005 02:07:08

Mash
Участник
 
Группа: Extensions
Зарегистрирован: 09-04-2005
Сообщений: 620
Веб-сайт

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Выделить код

Код:

function checkImg(img) {
    if (!img.complete)
        return false;
    if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0)
        return false;
    return true;
}
Иль пишет

Чур не меня. Упаси бог от xpoint.ru.

От google тоже шарахаемся?

Отсутствует

 

№816-05-2005 14:41:05

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Парни, вы чего! Не поняли!?! Я же написал вверху чего мне надо! Мне не нужно лечение, я озаботился удалением (к словам не цеплятся, бл.. :) )!
Есть рулез, изволь выполнять. Если Gecko не соответствует своему рулезу, объясните, плиз, почему!

Mash, О! Опять привет. Да, согласен, на xpoint.ru умные ребята, жаль что не пересекался, но мне совсем не нужна заплатка, тем более с xpoint.ru (надо же, кто-то успел до тебя обучить меня пользоваться гуглом), тем более такая древняя. Извини, можешь читать посты прежде чем постить? Про comlete понял, что я писал? Раз уж коснулись - это решение вообще не решение (жизнь оказалась сложнее). Как говорится: "Для учебника аляповато, для жизни кривовато".

Выделить код

Код:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<img src="p1.gif" onClick="gd(this)">
<script language="JavaScript" type="text/JavaScript">
function checkImg(img) {//эта функция от Mash
    if (!img.complete)
        return false;
    if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0)
        return false;
    return true;
}
function gd(e){//рассмотрим непригодность "checkImg(img)", кликнув в браузере по изображению
alert("naturalWidth: "+e.naturalWidth)
alert("complete="+e.complete+"\n получаем true, но не забываем про глюки с complete в Gecko и не доверяем на будующее")
alert("функция checkImg(img)="+checkImg(e)+"\n complete всеравно не работает")
e.src="p2.gif"//это изображение имеет одинаковые размеры с первым - получаем неясность и начинаем радоваться
//, что большинство пользует ИЕ
//Кстати, можете поставить несуществующее изображение и ничего не изменится
alert("naturalWidth: "+e.naturalWidth+"\n размеры-то изображений совпадают \n как убедится, что "+
"изображение загружено, \n ведь при отсутствии размеры тоже не изменятся \n и complete не среагирует")
alert("complete="+e.complete+"\n получаем true, но не забываем про глюки с complete в Gecko и не доверяем на будующее")
alert("функция checkImg(img)="+checkImg(e)+"\n получаем true, но только за счет нерабочего complete "+
"и неизменных размеров, что \n глюканет при отсутствии изображения")
e.src="glyuk.gif"//этого изображения у меня не существует - получаем старые значения. Как-то надоело радоваться за ИЕ
alert("naturalWidth: "+e.naturalWidth+"\n надо undefined или ноль, а получаем размеры старого изображения")
alert("complete="+e.complete+"\n должно быть false")
alert("функция checkImg(img)="+checkImg(e)+"\n получаем true, а надо получить false")
}
</script>
</body></html>

И уж для себя, родного, и под свои нужды, я давно создал заплату на недоделку Gecko, но это не програмистский форум, оставим.

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

alc,  Задавать так события не имеет смысла, драконовское Нетскейповское задание тоже должно работать (не стоит даже тестить), я же для наглядности писал.
Спасибо за nsIJSXMLHttpRequest, протестирую на досуге.

Отредактировано Иль (20-05-2005 12:36:59)

Отсутствует

 

№916-05-2005 14:47:42

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Абрамыч, а ты FF перезагрузи или нажми обновить страницу и у тебя тоже заглючит. А из инета тоже также глючит, но реже, не знал? Много зависит от кода. Бродилка же не перестает быть многозадачной. Кинь сюда код, посмотрю, очень жду, плиз.

Отредактировано Иль (20-05-2005 14:51:56)

Отсутствует

 

№1016-05-2005 15:00:24

djet
Участник
 
Группа: Extensions
Откуда: 404 Not Found
Зарегистрирован: 20-11-2004
Сообщений: 2611

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Иль
Рекомендую все подобные проблемы отправлять в BugZilla: там тебе и квалифицированный диагноз поставят, и, возможно, даже починят проблему (в будущих версиях).


Без бага и ошибки я софт Mozilla не люблю!
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Microsoft® Office Outlook® 2007 (12.0.4518.1014) MSO (12.0.4518.1014)

Отсутствует

 

№1116-05-2005 15:04:57

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Абрамыч, забыл сказать, протестил в Mozilla (чужие пк, забыл релиз списать) и Firefox 1.0.3 и на нескольких пк - не работает не хрена. Уж теряюсь в догадках от чего у тебя пашет, особенно oerror. Кидай свой код, посмотрим на форуме с ребятами.

Не понял, Абрамыч, а мой код у тебя все-таки не работает?

Отсутствует

 

№1216-05-2005 15:16:50

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

djet, намек понят, сваливаю.

Кстати смотрю форум потихоньку развиваете, молодцом. Кликните там модератору, чего-то с понедельника событие onclick по имени автора топика и onmouseover над "Цитировать" глючат

Абрамыч, одним глазом я здесь :) , жду...

Отсутствует

 

№1316-05-2005 15:39:42

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

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

Отсутствует

 

№1430-05-2005 21:40:26

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Ребята, все путем!
Не знаю как на локалке, а через сеть все работает правильно!

Абрамыч, как жаль, что некогда было online тестировать, через инет этот глюк не проявляется. Не в complete, не в onError. А ведь твой пост так и подсказывал на это.
Спасибо что на программистком форуме подсказали, теперь хоть код от прегруза облегчу.
Если кому интересно вот обсуждение http://forum.vingrad.ru/index.php?showtopic=51570, а вот мой пример из сети, где все работает http://illvin.narod.ru/gecko/complete_onerror.html

Отредактировано Иль (22-06-2005 18:35:25)

Отсутствует

 

№1522-06-2005 18:39:12

Иль
Участник
 
Группа: Members
Зарегистрирован: 18-03-2005
Сообщений: 37

Re: Недоделка, глюк или DOM. onerror и свойство complete для изображений

Не все так славно в датском королевстве.

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

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

Вот пример http://illvin.narod.ru/gecko/complete.html

Отредактировано Иль (22-06-2005 19:42:51)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]