Типичные ошибки кроссбраузерной совместимости [закрыты]
-
03-07-2019 - |
Вопрос
Каковы наиболее распространенные проблемы с совместимостью браузеров в основных настольных браузерах?
Никаких дублей, пожалуйста.Проголосуйте за проблемы, с которыми вы столкнулись.Я надеюсь, что список будет отсортирован самостоятельно."IE sux" - это не ловушка, а призыв к голосованию против.
[Редактировать] Да, я знаю, что это опрос - я публикую ответы здесь не для того, чтобы набрать очки - на самом деле мне интересно знать, с чем обычно сталкиваются люди.
Решение
Причудливый режим содержит исчерпывающий список множества отличий, требующих внимания !-)
-- но он, как и большинство других сайтов и блоггеров в сети, по-своему сосредоточен, и это приводит к некоторым незначительным или крупным ошибкам и несоответствиям...
Другие советы
Прозрачные PNG-файлы в Internet Explorer 6, особенно потому, что обычный обходной путь без использования JavaScript с использованием AlphaImageLoader может иметь побочный эффект блокировка IE6.
CSS - в значительной степени разобрался в современных браузерах, но все еще остается проблемой - особенно в том, что касается верстки.
Обратите внимание, что это не критично, но это проблема совместимости, к которой я почти всегда возвращаюсь при разработке сайта.
кэширование и хэши предыдущих страниц.
Управление памятью может быть проблемой - разные сборщики мусора перегружают разные типы циклических ссылок, хотя firefox довольно хорошо справляется с правильной очисткой сложных объектов.
Я обнаружил, что IE 6 имеет довольно небольшие ограничения на допустимую глубину стека.
В какой-то момент я использовал приятную рекурсивную функцию, чтобы получить положение элемента в документе:
function getOffsetTop (element) {
var offset = 0;
if (element.offsetTop)
offset = offset + element.offsetTop;
if (element.offsetParent)
offset = offset + getOffsetTop(element.offsetParent);
return offset;
}
К сожалению, при вызове этого метода для элементов в очень глубокой иерархии узлов IE жалуется на превышение максимального размера стека (я забыл точное сообщение об ошибке).Чтобы обойти это, мне нужно было использовать итеративный подход, чтобы сохранить размер стека небольшим:
function getOffsetTop (element) {
var offset = 0;
if (element.offsetTop)
offset = offset + element.offsetTop;
var parent = element.offsetParent;
while (parent) {
if (parent.offsetTop)
offset = offset + parent.offsetTop;
parent = parent.offsetParent;
}
return offset;
}
Плавает.В IE6 / 7 существует бесконечное количество ошибок с плавающей точкой - Пикабо, гильотина, двойное поле, убегающие поплавки, разрыв в 3 пикселя, повторяющиеся символы, устранен ряд ошибок, связанных с доступным пространством...
Самая распространенная ошибка, о которой я могу вспомнить - и она была проблемой для меня дважды только на этой неделе - это ошибка IE6 и коробочной модели.Посмотри это!
В частности, проблема, о которой я думаю, заключается в том, что у вас есть плавающие DIVS, которые разработчик думает все они помещаются в DIV-оболочку, но не в IE6, потому что они немного больше.
Таким образом, вместо трех столбцов вы получаете два, а третий находится где-то внизу экрана - вы хотите:
+-------------------------------+
|+------+ +-----------+ +------+|
|| | | | | ||
|| foo | | bar | | baz ||
|| | | | | ||
|| | | | | ||
|+------+ +-----------+ +------+|
+-------------------------------+
но вы получаете:
+-------------------------------+
|+--------+ +------------+ |
|| | | | |
|| foo | | bar | |
|| | | | |
|| | | | |
|+--------+ +------------+ |
|+------+ |
|| | |
|| | |
|| baz | |
|| | |
|| | |
|+------+ |
+-------------------------------+
При выполнении XMLHttpRequest и функции onreadystatechange свойство XMLHttpRequest.responseText содержит данные, загруженные в этот момент в Firefox, но не в IE (и, возможно, Safari).
Это предотвращает захват частичных данных в этих браузерах для использования при отображении индикатора выполнения.
Каждый сайт фиксированной ширины с центром, который я создал, т.е.использование 'margin: 0 auto' для некоторого содержащего div для центрирования всего - не работает в IE6, пока я не протестирую его и не применю "взлом".Это заводит меня каждый раз.