Страницы: 1
Пишу, рассчитывая на ваше знакомство с 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)
Отсутствует
Выложу проблемный код, чтоб вы могли сообразить, что к чему наверняка.
Попробуйте прогнать в 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)
Отсутствует
А так?
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)
Бди!
Отсутствует
Абрамыч, какой ты хитрый! А ты знаешь что получил старые значения свойства complete. Не меняй код. Я не просто так расставил пустые alert. Браузер штука многозадачная и не успевает сменить свойство, а ты его уже опросил. Может ты не знал, но пустые alert имитируют задержку загрузки через инет.
Форумы xpoint.ru для решения проблем хороши
Чур не меня. Упаси бог от xpoint.ru. Только не он.
Так что повторяю для всех, кто обрадовался. Проблема не решена.
А вот насчет onerror завтра обмозгую и попробую с ребятами другие релизы
Отсутствует
function checkImg(img) { if (!img.complete) return false; if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) return false; return true; }
Чур не меня. Упаси бог от xpoint.ru.
От google тоже шарахаемся?
Отсутствует
Парни, вы чего! Не поняли!?! Я же написал вверху чего мне надо! Мне не нужно лечение, я озаботился удалением (к словам не цеплятся, бл.. )!
Есть рулез, изволь выполнять. Если 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)
Отсутствует
Абрамыч, а ты FF перезагрузи или нажми обновить страницу и у тебя тоже заглючит. А из инета тоже также глючит, но реже, не знал? Много зависит от кода. Бродилка же не перестает быть многозадачной. Кинь сюда код, посмотрю, очень жду, плиз.
Отредактировано Иль (20-05-2005 14:51:56)
Отсутствует
Иль
Рекомендую все подобные проблемы отправлять в 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)
Отсутствует
Абрамыч, забыл сказать, протестил в Mozilla (чужие пк, забыл релиз списать) и Firefox 1.0.3 и на нескольких пк - не работает не хрена. Уж теряюсь в догадках от чего у тебя пашет, особенно oerror. Кидай свой код, посмотрим на форуме с ребятами.
Не понял, Абрамыч, а мой код у тебя все-таки не работает?
Отсутствует
djet, намек понят, сваливаю.
Кстати смотрю форум потихоньку развиваете, молодцом. Кликните там модератору, чего-то с понедельника событие onclick по имени автора топика и onmouseover над "Цитировать" глючат
Абрамыч, одним глазом я здесь , жду...
Отсутствует
Ребята, все путем!
Не знаю как на локалке, а через сеть все работает правильно!
Абрамыч, как жаль, что некогда было 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)
Отсутствует
Не все так славно в датском королевстве.
Всеравно облом!!!
Покликайте сами по незагруженному изображению в браузерах Gecko, там почему-то всегда complete=true. Это что еще такое?
Все, я ушол в осадок, надоело, делаю средствами JS!
Вот пример http://illvin.narod.ru/gecko/complete.html
Отредактировано Иль (22-06-2005 19:42:51)
Отсутствует
Страницы: 1