>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Проблемы с сайтами http://forum.mozilla-russia.org/viewforum.php?id=24 >Недоделка, глюк или DOM. onerror и свойство complete для изображений http://forum.mozilla-russia.org/viewtopic.php?id=2933 |
Иль > 12-05-2005 10:50:21 |
Пишу, рассчитывая на ваше знакомство с DOM и JS, и потому что не знаю, куда еще писать. Чего хочу - устранения данного нечеловеческого глюка во всем семействе Gecko или понять, почему такой облом есть на земле . У меня есть такое правило - то, что работает в Gecko, то правильно. Суть проблемы: Оставим Оперу тем, кто любит ждать, терпеть и догонять (там и в ИЕ как раз все работает), но в Gecko такого быть не должно. Видимая причина глюка – браузеры семейства Gecko умеют посылать запрос на загрузку изображения, но никак его не обрабатывают. Видимо это просто забыли запрограммировать. Выглядит это странно на фоне реализации в Gecko XMLHttpRequest. Что приходится на данный момент делать - отсеивать все браузеры семейства Gecko и утяжелять код JS таймингами и проверками – тобишь в кривую обходить данную недоделку. Умел бы XMLHttpRequest работать с изображениями - не вопрос, сами бы реализовали. Методы решения - посоветуйте, куда писать по этому вопросу, может и исправят со временем. PS. 1.В случае неточностей и заблуждений прошу проявить снисходительность . |
Иль > 12-05-2005 16:24:39 |
Выложу проблемный код, чтоб вы могли сообразить, что к чему наверняка. Насчет, как здесь принято говорить, "мусорного" обращения к элементам не беспокойтесь, с 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> |
alc > 12-05-2005 21:59:12 |
А так? Выделить код Код: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:08:18 |
Кстати, для событий в XMLHttpRequest(nsIXMLHttpRequest) сделали специальный интерфейс - nsIJSXMLHttpRequest |
Иль > 12-05-2005 23:42:34 |
Спасибо ребята, разбирусь завтра, но я не один такой, нас много и у всех этот глюк |
Иль > 12-05-2005 23:59:00 |
Абрамыч, какой ты хитрый! А ты знаешь что получил старые значения свойства complete. Не меняй код. Я не просто так расставил пустые alert. Браузер штука многозадачная и не успевает сменить свойство, а ты его уже опросил. Может ты не знал, но пустые alert имитируют задержку загрузки через инет.
Чур не меня. Упаси бог от xpoint.ru. Только не он. Так что повторяю для всех, кто обрадовался. Проблема не решена. А вот насчет onerror завтра обмозгую и попробую с ребятами другие релизы |
Mash > 13-05-2005 02:07:08 |
Выделить код Код:function checkImg(img) { if (!img.complete) return false; if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) return false; return true; } Иль пишет
От google тоже шарахаемся? |
Иль > 16-05-2005 14:41:05 |
Парни, вы чего! Не поняли!?! Я же написал вверху чего мне надо! Мне не нужно лечение, я озаботился удалением (к словам не цеплятся, бл.. )! 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, Задавать так события не имеет смысла, драконовское Нетскейповское задание тоже должно работать (не стоит даже тестить), я же для наглядности писал. |
Иль > 16-05-2005 14:47:42 |
Абрамыч, а ты FF перезагрузи или нажми обновить страницу и у тебя тоже заглючит. А из инета тоже также глючит, но реже, не знал? Много зависит от кода. Бродилка же не перестает быть многозадачной. Кинь сюда код, посмотрю, очень жду, плиз. |
djet > 16-05-2005 15:00:24 |
Иль |
Иль > 16-05-2005 15:04:57 |
Абрамыч, забыл сказать, протестил в Mozilla (чужие пк, забыл релиз списать) и Firefox 1.0.3 и на нескольких пк - не работает не хрена. Уж теряюсь в догадках от чего у тебя пашет, особенно oerror. Кидай свой код, посмотрим на форуме с ребятами. Не понял, Абрамыч, а мой код у тебя все-таки не работает? |
Иль > 16-05-2005 15:16:50 |
djet, намек понят, сваливаю. Кстати смотрю форум потихоньку развиваете, молодцом. Кликните там модератору, чего-то с понедельника событие onclick по имени автора топика и onmouseover над "Цитировать" глючат Абрамыч, одним глазом я здесь , жду... |
Иль > 16-05-2005 15:39:42 |
Виноват, с JS никаких глюков. Я тут с adblock экспериментировал, вот и забыл отключить, тк для этих целей прокси пользую. |
Иль > 30-05-2005 21:40:26 |
Ребята, все путем! Абрамыч, как жаль, что некогда было online тестировать, через инет этот глюк не проявляется. Не в complete, не в onError. А ведь твой пост так и подсказывал на это. |
Иль > 22-06-2005 18:39:12 |
Не все так славно в датском королевстве. Всеравно облом!!! Покликайте сами по незагруженному изображению в браузерах Gecko, там почему-то всегда complete=true. Это что еще такое? Вот пример http://illvin.narod.ru/gecko/complete.html |