| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Багография браузеров. Баги,фичи IE, Opera, Firefox |
| Автор: Гость_12345 7.12.2005, 14:04 |
| Что-то такой темы нет, а постоянно нужна, чтобы накапливать знания об особенностях поведения кодов. Свежие наблюдения. * MozOpacity (-moz-opacity) в Firefox (1.06) есть, но с ней сразу идут в комплекте особенности. 1. Баг перехода на 100%. Если быстро увеличивать непрозрачность (iframe) до 100%, то часто (при больших полях прорисовки, по крайней мере) окончательный переход на 100% (MozOpacity =1;) сопровождается кратковременным пропаданием и новой прорисовкой слоя. Наблюдается неблагопристойный скачок рисования изображения. Возможно, если всегда делать достаточную паузу перед последним переходом (с 0.9 на 1, с 0.95 на 1), этого не будет наблюдаться. 1.а. Но это полбеды. Беда в том, что в любом переходе на 100% _или_обратно_ теряется отображение всех полей ввода документа в iframe. Независимо от того, наблюдался ли визуальный скачок. Вывод - никогда не делать MozOpacity =1, если в слое есть формы. 3. Сильная зависимость от видеокарты. На посредственной карте обновление прозрачного слоя FF при смене прозрачности сильно тормозит. Например, на Ati Rage 128 Pro раза в 3-4 по сравнению с GeForce4. Если во втором случае скорости в FF и IE равны, в первом разница очень большая, и тем больше, чем больше площадь полупрозрачного слоя. 4. (о баге упоминал Sardar) Если в < style > прописана -moz-opacity, это не значит, что она прочитается в (объект).style.MozOpacity. Её придётся дублировать в MozOpacity, чтобы работала с JS. ** Фича Мозиллы. Фон iframe у неё прозрачный, а не белый, как у других. Поэтому документы, не имеющие собственного фона, в них прозрачны. Решение - ставить стиль background-color:white . *** Хорошая фича Мозиллы (Firefox), но из другой оперы (не Оперы). Cуществует объект document.all[0],innerHTML , содержащий коды страницы (правда, насовывает атрибутов _base_href=..., если объявлен, куда не лень), существует document.all.length, document.all[1] и другие нумерованные элементы, в то время как !(!document.all) == false , традиционно, чтобы FF отличать от IE. **** FF при цикле for(i in document) и для прочих объектов имеет в переменной цикла совсем не то, что IE или Opera . |
| Автор: Sardar 7.12.2005, 16:44 | ||||||||
Смотря какие обьекты перечисляем. Под ИЕ складываеться ощущение что все HTML элементы описанны "внытри" одним общим классом обьектов, что включает в себя все возможные обработчики событий, аттрибуты и т.д. Мозилла и Опера работают согласно DOM рекомендации, где каждый html элемент имеет свой класс с иерархией в верх до Node. ИЕ не перечисляет методы, мозилла перечисляет. Под мозиллой как и под оперой существуют все конструкторы под все html элементы, что позволяет работать с прототипами классов элементов:
Также под мозиллой есть геттеры/сеттеры, как "магические", так и "прямые":
Вообще мозилла многое что поддерживает |
| Автор: Ciber SLasH 22.12.2005, 04:35 | ||
Протестите этот код в IE6:
у меня он намертво вешает его... |
| Автор: Sardar 22.12.2005, 19:30 |
| Мамочки... почувствовал себя беспомощным в винде, не мог убить IE, ему явно до лампочки были потуги менеджера задачь... главное последний п***а таки сообщал что "прога убита, сообщить мелкософту о проблеме?", а ИЕ продолжал висет и жрать память. Xавал он её со скоростью 20Мб в секунду, тем самым забивая своп и не давая жить никому, даже менеджер задачь еле-еле, медленно, открывался Тащусь с винды По коду, похоже ИЕ обращаеться к сорцу картинки, отрабатывает JS, меняеться стиль, ИЕ по новой хочет отрисовать всё, смотрит в обьект картинку, данных нет, опять с сорцу и по кругу в начало... Перед каждой отрисовкой документа вероятно захватывает память, а старую освобождает после отрисовки страницы, отсюда постоянный захват памяти... |
| Автор: Ciber SLasH 23.12.2005, 06:48 |
| Да, уж... вот тебе и IE... |
| Автор: 12345c 28.3.2006, 12:50 |
| Здесь собирают баги новых версий с демонстрациями от разных браузеров: http://www.gtalbot.org/BrowserBugsSection/ цитата: 1 bug in Mozilla 23 bugs in IE 6 38 bugs in Opera 9 5 bugs in IE 7 |
| Автор: 12345c 23.7.2006, 02:09 | ||
| Ещё 1 различие между IE и FF Если делаем pre в таблице, в IE всё управляемо с нижним отступом, а в FF, если таблица "обжимает" pre, появляется "пустая строка" в конце его.
|
| Автор: 12345c 8.8.2006, 19:33 |
| Свежие баги Оперы 9.01 и свежеобнаруженные - в Gecko. Роятся они вокруг механизма сохранения предыдущего состояния поля ввода (textarea, input) через defaultValue. (Реализовывалось в группе функций для "http://forum.vingrad.ru/index.php?showtopic=107024".) 1. Опера 9.01, в отличие от мирной 8.01, отказалась работать с defaultValue, но не просто так, а только для тега input! Обходных путей не искал и до причин не докапывался - упомянутый эффект пока что можно наблюдать на указанном выше скрипте (переключить чекбокс на работу с input, сделать действие с кнопкой и нажать кнопку "Back" - отката на действие не произойдёт). 2. Ещё более сильный и потребовавший действий эффект наблюдался в Gecko - FF1.07, NN8.1. На этот раз именно в textarea. Эксплойта сейчас нет, потому что на примере он не прявляется. Когда вставляешь пример в более объёмную страницу, то попытка использовать запоминание в defaultValue каждого действия приводит к невообразимому по неряшливости эффекту наложения сдвинутой части прежней строки на правильную новую, неудаление с экрана этого наложенного остатка текста - в общем, полный стопроцентный баг. Пришлось сменить defaultValue на переменную. Если заинтересует - выложу эксплойт, а пока что знайте - Gecko+textarea+defaultValue +манипуляции с курсором - чревато. 3. Замечу про маленький баг всех, кроме Gecko - попытка вывести очень быстро новый курсор после смены содержания поля ввода ведёт к невыводу этого курсора. Приходится вводить задержку (setTimeout) сколь угодно малой символической величины. Типа "дайте нам со своим хозяйством разобраться, а потом валите следующие задачи". |
| Автор: 12345c 20.8.2006, 03:19 |
| Обнаружена такая "фича" FF/Opera, которая ставит её на один уровень с багами. Оказывается, что у них выделение текста в поле ввода выделением не считается - не обнаруживается функцией getSelection(). Практически это приводит к тому, что мы не можем процитировать текст из одного поля ввода в другом. Даже косвенными методами - по selectionEnd - не можем этого сделать, потому что у них в каждом поле ввода эти свойства сохраняются. Придётся искать другие методы. В сыязи с этим вопрс - как у них определить, в каком поле ввода находится курсор? Добавлено @ 03:33 Вот для Оперы 8+ решение по выбору выделенного текста есть - document.selection.createRange().text . Причём кривоватое: оно существует только в поях ввода, а вне их - getSelection(). |
| Автор: 12345c 8.9.2006, 02:06 |
| Когда грузишь страницу с УРЛом через адресную строку после локальной страницы, а затем пытаешься работать с AJAX, IE6 (SP2) выдаёт "доступ запрещён". Если же по загруженному сайту сделаешь хотя бы 1 переход, ошибки с AJAX не будет. Проявляется только во вновь открытом окне. Если перейти на другой сайт и снова загрузить страницу с AJAX, ошибки не будет (история браузера не равна 1). Такой эффект - не на всех компьютерах. Может, с прокси-настройками связано. В наблюдавшемся случае, например, локальный сервер со сраницей AJAX был настроен на порт 85, а на другом, с портом 80 - всё нормально. ------------------------------- Сгенерированный код не ищется по Ctrl-F в IE6 (SP2) (!!). Или ищет не все и вообще, странно себя ведёт - стр. http://js2.ru/files/js-man3.htm . В "других" ничего подобного не наблюдается. В то же время, другой пример с малым количеством генерируемого текста, но с моногчисленными вставками (все даты и имена автора генерируются) - http://js2.ru/files/article-DOM.htm - показывает, что генерированные фрагменты прекрасно ищутся. Следовательно, придётся узнать, при каких условиях поиск в IE начинает ломаться. |
| Автор: skyboy 10.9.2006, 11:33 | ||
вот такой вот код.
Firefox честно заявляет "adding event listener", IE - "attaching event", a Opera - "adding event listener"... НО! В Опере не работает. Если же в условии проверять сначала на attachEvent, то работает и в Опере. Получется, что свойство addEventListener есть, но не работает. И в то же время наличествует attachEvent. Это бага или моя ошибка? Opera 8.54. |
| Автор: Sardar 10.9.2006, 15:21 |
| skyboy, третьим параметром ты указываешь capturing режим, т.е. твое событие отработает на проходе от документа к event.target, это ты так специально? Потому как attachEvent capturing не поддерживает вообще, т.е. получаеться у тебя один алгоритм будет работать в корне по разному на разных браузерах. Отсюда: если не знаем что есть capturing mode, ставь третий параметр в false. y3u, new function() выполняет совсем не то что ты думаешь |
| Автор: skyboy 10.9.2006, 22:13 |
| Sardar, да. В самом деле - забыл потереть. Просто это часть документа, приеденная к минимальному при нерабочести размеру. Однако не могу понять, каким макаром перехват события предками мешает закрепить обработчик за элементом. |
| Автор: Sardar 10.9.2006, 22:50 | ||
Opera... как много в этом слове |
| Автор: y3u 12.9.2006, 15:04 |
| не знаю, бага или фича, сегодня столкнулся. Генерируется скриптом в DOM довольно объемное количество элементов, которое в самом конце вставляется в какой-нить HTML рендерер. Соответственно, до того ка все вставилось в докуменнт для показа во глубине скрипта |
| Автор: dstorm81 24.9.2006, 11:30 |
| еще небольшое отличие в опере 9 допустим создаешь элементы, которым присваиваешь backgroundColor=rgb(r,g,b) в таком варианте затем выбираем элемент и пытаемся узнать его backgroundColor, в опере выдаст #rrggbb, в остальных rgb(r,g,b) |
| Автор: skyboy 24.9.2006, 14:20 |
| y3u, хм... что-то крутиться в голове, вроде сосед по офису позавчера с таким столкнулся, так вопрос решился использованием не свйства checked, a defaultChecked. а checked, в самом деле, хранит "текущее состояние", и потому в качестве "начального условия" изменять не получится |
| Автор: y3u 24.9.2006, 21:44 | ||||
не совсем так, все оказалось тривиальней
|
| Автор: Zeroglif 24.9.2006, 22:36 | ||
Всё правильно крутится
|
| Автор: Greendrake 11.1.2007, 22:58 |
| Обнаружил, что Opera9 стала заносить в history AJAX-запросы. В Opera8.5 такого ещё нет. Этого не делают ни IE6 ни Firefox2. Полагаю, такое поведение Opera9 — баг. По крайней мере для меня оно поперёк горла — мои скрипты заточены как раз под то, что в истории остаются только изменения в адресной строке. |
| Автор: svl63 10.4.2007, 00:08 | ||
| Баг заключается в следующем: если уменьшить размеры окна таким образом, чтобы наклонный текст разбивался на две строки, в IE появится полоса горизонтальной прокрутки. В принципе, достаточно того, что два слова, имеющие общий определитель (не важно, какой) наклонного стиля текста, будут разнесены на разные строки. Такой же эффект проявляется у фрейма, если в него загружен документ с подобным параграфом. При этом наличие DIV здесь уже не имеет значения, а "необходимо" наличие вертикальной полосы прокрутки: есть вертикальная - будет и горизонтальная.
|
| Автор: butionok 22.4.2007, 16:43 | ||
В Опере не работает стандартный метод blur на кнопках.
|
| Автор: Deja_Vu 15.6.2007, 17:39 | ||
| Проверенно только на IE и Opere. Событие в IE происходит, когда кликаем в любой точке броузера. В Operer только, если кликаем на элементах в body, но при этом body выделяется как вся страница. Думаю IE тут не врет.
|
| Автор: BuTbKa_ua 12.10.2007, 15:45 |
| Заметил в FF такую фичу: designMode = 'on' при воде текста после ввода пробела к концу строки добавляется <br />, если его там уже нету. в IE6, IE7, Safari3 такого нет. |
| Автор: ksnk 29.1.2008, 16:08 | ||
| Полный АХТУНГ... Делаем как в учебнике
В FF и Опере все как в учебнике, а в IE 6 выдается 0 |
| Автор: AKS 29.1.2008, 20:16 |
Так ведь X - это не массив. Он не должен вести себя так, "как в учебнике". |
| Автор: ksnk 29.1.2008, 20:27 |
| AKS, А ЧТО это такое? Я хочу нечто. ведущее себя как массив и имеющее кое-что дополнительно. FireFox меня понимает, а IE нет... |
| Автор: AKS 29.1.2008, 20:33 | ||||
Да неужели? ;)
Так понимает? ;) Можно, конечно, "уболтать" их всех как-нибудь так:
Только не знаю, насколько это надежно... |
| Автор: ksnk 29.1.2008, 20:43 |
| Угу... Нет в жизни щастья... Да'с... Не баг'c... Точнее не баг броузеров, а баг идеологии JavaScript. Ну, или моего понимания этой идеологии ;-) |
| Автор: AKS 29.1.2008, 20:57 | ||||
Почему же "не баг броузеров"? Можно, как раз, "предъявить" претензии FF/Опера. Вот так только IE бросит ошибку:
А должны все:
|
| Автор: ksnk 29.1.2008, 21:32 | ||
Еще про массив. Чисто теоретически - как отличить такое от "настоящего" массива?
Только IE утверждает, что у X не будет собственного свойства length, в то время как все остальные не находят отличий по всем параметрам. |
| Автор: AKS 30.1.2008, 07:59 | ||
Было дело прошлым летом - Евгений Петров показал http://xpoint.ru/forums/programming/javascript/misc/thread/41130.xhtml#364111, суть которого сводится примерно к следующему:
По идее, любой браузер, претендующий на соответствие ECMAScript Language Specification Edition 3, должен выдать нужный результат. Но мир, в котором мы живем, не идеален - не все браузеры могут оказаться таковыми. Сразу понятно, что, к примеру, IE 5.0 - один из их числа. Сейчас не помню точно, но мне кажется, что, тестируя этот вариант, я нашел еще какие-то браузеры, которые выдавали не то, что хотелось бы. И тут дело не в методе call (его то можно легко заменить), а в методе toString, работающем не так, как надо... |
| Автор: solenko 18.2.2008, 11:23 | ||
В результате в IE имеем сообщение при клике в любой чати окна. Источник: http://ejohn.org/blog/most-bizarre-ie-quirk/ |
| Автор: DenVdmj 23.1.2009, 12:55 | ||
По поводу описанного выше бага MSIE с addRule, на таком коде:
те же симптомы -- ие жрет память со бешеной скоростью, за считанные секунды -- гиг, выбрасывая при этом всех полностью в своп. Жесть, одним словом. Я собственно, поиском сюда вышел, ищу как решить проблему. Может у кого нибудь есть идеи как перехватить ошибку? |