Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Багография браузеров. Баги,фичи IE, Opera, Firefox, Недоработки или нестандартное поведение 
:(
    Опции темы
Гость_12345
Дата 7.12.2005, 14:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Что-то такой темы нет, а постоянно нужна, чтобы накапливать знания об особенностях поведения кодов.

Свежие наблюдения.
* 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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата
FF при цикле for(i in document) и для прочих объектов имеет в переменной цикла совсем не то, что IE или Opera .

Смотря какие обьекты перечисляем. Под ИЕ складываеться ощущение что все HTML элементы описанны "внытри" одним общим классом обьектов, что включает в себя все возможные обработчики событий, аттрибуты и т.д. Мозилла и Опера работают согласно DOM рекомендации, где каждый html элемент имеет свой класс с иерархией в верх до Node. ИЕ не перечисляет методы, мозилла перечисляет.

Под мозиллой как и под оперой существуют все конструкторы под все html элементы, что позволяет работать с прототипами классов элементов:
Код
<script type="text/javascript">
<!--
  HTMLDivElement.prototype.showInnerHTML=function() {alert(this.innerHTML);};
//-->
</script>

<div id="test">Test</div>
<script type="text/javascript">
<!--
document.getElementById('test').showInnerHTML();
//-->
</script>


Также под мозиллой есть геттеры/сеттеры, как "магические", так и "прямые":
Код
//"прямые" г/с
var o = {_value:"Test value", _reads:0, _writes:0,
         value getter:function () {this._reads++; return this._value;},
         value setter:function (n) {this._writes++; return this._value = n;},
         accessed getter:function(){return [this._reads, this._writes];}
        };
alert(o.value);
o.value=90;
alert(o.value);
alert(o.accessed);

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Untitled</title>
<script type="text/javascript">
<!--
  HTMLDivElement.prototype.__defineGetter__('myInnerHTML', function() {alert(this.innerHTML); return "<pre>\n"+this.innerHTML.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/ /g, '&nbsp;')+"\n</pre>"; });
//-->
</script>
<div id="test">Test <span>bla</span></div>
<script type="text/javascript">
<!--
document.write(document.getElementById('test').myInnerHTML);
//-->
</script>

</body>
</html>


Вообще мозилла многое что поддерживает smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ciber SLasH
Дата 22.12.2005, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Протестите этот код в IE6:
Код
<html>
<head>
<style type='text/css'>
img {border: 2px solid blue}
.attach {border: 2px solid blue}
</style>
</head>

<body>
<img class='attach' src='smiles/death.gif' width="33" height="65">
<img src='smiles/death.gif' width="33" height="65">
<img src='javascript:document.styleSheets[0].addRule(String.fromCharCode(39,46,97,116,116,97,99,104,39),String.fromCharCode(39,98,111,114,100,101,114,45,119,105,100,116,104,58,48,39));'>
</body>
</html>

у меня он намертво вешает его...
PM   Вверх
Sardar
Дата 22.12.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Мамочки... почувствовал себя беспомощным в винде, не мог убить IE, ему явно до лампочки были потуги менеджера задачь... главное последний п***а таки сообщал что "прога убита, сообщить мелкософту о проблеме?", а ИЕ продолжал висет и жрать память. Xавал он её со скоростью 20Мб в секунду, тем самым забивая своп и не давая жить никому, даже менеджер задачь еле-еле, медленно, открывался smile

Тащусь с винды smile

По коду, похоже ИЕ обращаеться к сорцу картинки, отрабатывает JS, меняеться стиль, ИЕ по новой хочет отрисовать всё, смотрит в обьект картинку, данных нет, опять с сорцу и по кругу в начало... Перед каждой отрисовкой документа вероятно захватывает память, а старую освобождает после отрисовки страницы, отсюда постоянный захват памяти...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ciber SLasH
Дата 23.12.2005, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



Да, уж... вот тебе и IE... smile
PM   Вверх
12345c
Дата 28.3.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Здесь собирают баги новых версий с демонстрациями от разных браузеров:
http://www.gtalbot.org/BrowserBugsSection/

цитата:
1 bug in Mozilla
23 bugs in IE 6
38 bugs in Opera 9
5 bugs in IE 7
PM WWW   Вверх
12345c
Дата 23.7.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Ещё 1 различие между IE и FF

Если делаем pre в таблице, в IE всё управляемо с нижним отступом, а в FF, если таблица "обжимает" pre, появляется "пустая строка" в конце его.

Код
<b>Эффект пустой строки в FF в PRE внутри таблицы.</b><br>
<style>
table{
  background-color: white;
  border-spacing: 0px;
  border-collapse: collapse;
}
table th{
  background-color: #cccccc;
  border: 1px solid #666666;
  padding: 2px 3px;
}
table td{
  border: 1px solid #666666;
  padding: 2px 3px;
}
pre.code{
  font-family: 'Lucida Console', Courier;
  background-color: #efefef;
  border: 1px dashed #666666;
  padding: 2px 4px;
  margin: 0.2em;
  overflow: auto;/*если убрать, эффекта в FF не наблюдается*/
}
</style>
<table><tr><th> Так пишутся<br>
 списки<br><em>(отступ на 2<br>и более<br>пробелов)</em></th>
<td><pre class="code">  * Это пункт списка
  * Это второй пункт
    * Список 2-го уровня
  * Ещё пункт</pre></td></tr><tr><th>Случай<br> необжатого<br>
"pre"</th><td><pre class="code">  Не имеет пустой
  строки снизу в FF</pre></td></tr></table>
 


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
12345c
Дата 8.8.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Свежие баги Оперы 9.01 и свежеобнаруженные - в Gecko.

Роятся они вокруг механизма сохранения предыдущего состояния поля ввода (textarea, input) через defaultValue. (Реализовывалось в группе функций для "вставки текста под курсором".)

1. Опера 9.01, в отличие от мирной 8.01, отказалась работать с defaultValue, но не просто так, а только для тега input! Обходных путей не искал и до причин не докапывался - упомянутый эффект пока что можно наблюдать на указанном выше скрипте (переключить чекбокс на работу с input, сделать действие с кнопкой и нажать кнопку "Back" - отката на действие не произойдёт).

2. Ещё более сильный и потребовавший действий эффект наблюдался в Gecko - FF1.07, NN8.1. На этот раз именно в textarea. Эксплойта сейчас нет, потому что на примере он не прявляется. Когда вставляешь пример в более объёмную страницу, то попытка использовать запоминание в defaultValue каждого действия приводит к невообразимому по неряшливости эффекту наложения сдвинутой части прежней строки на правильную новую, неудаление с экрана этого наложенного остатка текста - в общем, полный стопроцентный баг. Пришлось сменить defaultValue на переменную. Если заинтересует - выложу эксплойт, а пока что знайте - Gecko+textarea+defaultValue +манипуляции с курсором - чревато.

3. Замечу про маленький баг всех, кроме Gecko - попытка вывести очень быстро новый курсор после смены содержания поля ввода ведёт к невыводу этого курсора. Приходится вводить задержку (setTimeout) сколь угодно малой символической величины. Типа "дайте нам со своим хозяйством разобраться, а потом валите следующие задачи".
PM WWW   Вверх
12345c
Дата 20.8.2006, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Обнаружена такая "фича" FF/Opera, которая ставит её на один уровень с багами. Оказывается, что у них выделение текста в поле ввода выделением не считается - не обнаруживается функцией getSelection(). Практически это приводит к тому, что мы не можем процитировать текст из одного поля ввода в другом. Даже косвенными методами - по selectionEnd - не можем этого сделать, потому что у них в каждом поле ввода эти свойства сохраняются. Придётся искать другие методы. В сыязи с этим вопрс - как у них определить, в каком поле ввода находится курсор?

Добавлено @ 03:33 
Вот для Оперы 8+ решение по выбору выделенного текста есть - document.selection.createRange().text . Причём кривоватое: оно существует только в поях ввода, а вне их - getSelection().
PM WWW   Вверх
12345c
Дата 8.9.2006, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Когда грузишь страницу с УРЛом через адресную строку после локальной страницы, а затем пытаешься работать с 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 начинает ломаться.

Это сообщение отредактировал(а) 12345c - 3.3.2008, 14:05


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
skyboy
Дата 10.9.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



вот такой вот код.
Код

<html>
  <head>
  <script type="text/javascript">
  function addHandler(el,eventType,handler)
  {
   if(el.addEventListener)
   {
    alert('adding event listener...');
    el.addEventListener(eventType.replace(/^on/,''),handler,true);
   }
   else
   {
    alert('attaching event...');
    el.attachEvent(eventType,handler);
   }
  }
  </script>
  </head>
  <body>
  <button onclick="addHandler(this,'onclick',function() {alert('clicked!!!');});">click me</button>
  </body>
</html>

Firefox честно заявляет "adding event listener", IE  - "attaching event", a Opera - "adding event listener"... НО! В Опере не работает. Если же в условии проверять сначала на attachEvent, то работает и в Опере.
Получется, что свойство addEventListener есть, но не работает. И в то же время наличествует attachEvent. Это бага или моя ошибка?
Opera 8.54.
PM MAIL   Вверх
y3u
Дата 10.9.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: нет
Всего: 13



Цитата(skyboy @  10.9.2006,  11:33 Найти цитируемый пост)
И в то же время наличествует attachEvent. Это бага или моя ошибка?


могу ошибаться - лень ставить оперу, нужно попробовать вместо 
Код

function() {alert('clicked!!!');
 написать 
Код

new function() {alert('clicked!!!');});">


вдруг поможет, имхо, опера не всегда адекватный браузер smile


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
Sardar
Дата 10.9.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



skyboy, третьим параметром ты указываешь capturing режим, т.е. твое событие отработает на проходе от документа к event.target, это ты так специально? Потому как attachEvent capturing не поддерживает вообще, т.е. получаеться у тебя один алгоритм будет работать в корне по разному на разных браузерах.

Отсюда: если не знаем что есть capturing mode, ставь третий параметр в false.


y3unew function() выполняет совсем не то что ты думаешь smile Создаёться функция-конструктор, от которой создаёться новый обьект через new (конструктор отрабатывает), затем сам конструктор выбрасываеться, а обьект (это не функция) отдаёться как обработчик события, бразуедр должен кинуть исключение в этом случае.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
skyboy
Дата 10.9.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



Sardar, да. В самом деле - забыл потереть. Просто это часть документа, приеденная к минимальному при нерабочести размеру. Однако не могу понять, каким макаром перехват события предками мешает закрепить обработчик за элементом.  smile 
PM MAIL   Вверх
Sardar
Дата 10.9.2006, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(skyboy @  10.9.2006,  21:13 Найти цитируемый пост)
Однако не могу понять, каким макаром перехват события предками мешает закрепить обработчик за элементом. 

Opera... как много в этом слове smile  Попробуй на Opera 9, если и баг, то наверное пофиксили.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.