Хочется заметить, что писать совместимый код - сложное и неблагодарное дело. Ты
много дней работешь, решая глобальные вопросы по общей структуре кода. Десятки раз
переделываешь все заново, чтобы сделать его независимымым от капризов отдельных броузеров,
наконец тебе удается все вопросы разрешить. У тебя огромная бочка меда, которым ты
с радостью готов поделиться.
Но... Никогда не упускайте мелких недоработок. Потому что конечному пользователю
не видно, какие сложные вопросы и как изящно были решены в Вашем коде. Ему наплевать
на то, как вы решили свои глобальные проблемы. Если Пользователь видит, что Ваш код работает
"криво", он сразу отнесет его к разряду мусора, которого и так везде хватает. И тогда
в свою бочку меда Вы получите ложку дегтя, которая весь этот мед испортит.
Вам надо пример - пожалуйста. Возмем код только-что разработанного "Горизонтального
меню". Вроде все замечательно. Есть мелкая недоработка - при изменении размеров окна
броузера координаты всплывающих элементов не соответствуют новому положению опорных
(видимых всегда) пунктов меню. Мне это показалось таким мелким по сравнению с решением
самой задачи построения такого меню в целом. Надо просто нажать кнопку "Обновить" -
и все встанет на свои места. Однако ссылка на веб-странице, ведущая к примеру, открывала
файл примера в новом окне. Какая первая реакция? - разверуть на полный экран. Что
произошло при разворачивании? Правильно - координаты сбились. Пользователь сразу видит
"глюк", дальнейшая реакция вполне предсказуема. Чтобы это исправить потребовалось всего
десять минут (на сайте уже лежит
доработанная версия). Но как достать ту ложку "дегтя"
из бочки меда? Никак.
Вывод: никогда не упускайте мелких недоработок
в своем коде, даже если они кажутся Вам незначительными по сравнением со всем остальным.
Netscape Navigator
Да простят мне поклонники детища Нетскейпа, но лично мое мнение о нем самое негативное
по сравнением со всеми остальными броузерами. Наверно не случайно он успешно скончался
и уступил дорогу новой разработке - Мозиле. Тем не менее веб-мастеры
еще некоторое время должны будут думать о совместимости своих страниц со старым НЕдобрым
Навигатором. Хочу поделиться опытом и дать несколько советов, которых
нет в официальной документации.
Ссылка на файл. Если Вы разместили код JavaScript для своей страницы
в отдельном файле, и загружаете его по ссылке, то не размещайте эту ссылку выше кода
описания стилей в заголовке страницы (тег STYLE). В этом случае страница
с первого раза иногда вобще не загружается. Причем, если нажать "Обновить" - вроде все
нормально.
Атрибуты стиля. Замечен любопытный "глюк" в работе Навигатора.
Четвертая версия допускает назначение HTML-элементам атрибутов стиля прямо в теге элемента
при помощи атрибута стиль: style="attr: param;...". Никогда этим не пользуйтесь.
Если в коллекции атрибутов данного элемента нет нужного Вам (типа bgColor="color"),
то все остальные настройки необходимо выносить в общий список стилей в заголовке страницы или
во внешнем файле, иначе при изменении размеров страницы (развернуть на весь экран)
Навигатор начинает путать указанные параметры и назначать их другим
HTML-элементам самым непредсказуемым образом.
Быстродействие
Анализ быстродействия различных броузеров по обработке сценариев подтвердил известные
предположения. Самым медленным оказался Opera. Это особенно заметно при
запуске нескольких процессов одновременно, когда он подвисает на две-три секунды в то
время как другие выполняют расчет с практически незаметной задержкой.
К чести изобретателей JavaScript все детища Нетскейпа
работают со сценариями быстрее остальных.
Функция eval(). В JavaScript есть замечательная
функция, которая позволяет конструировать выражения "на лету". Допустим, вам требуется
вычислить какое-то длинное выражение, которое в зависимости от разных условий будет
отличаться составляющими. В этой ситуации можно поступить так - сконструировать выражение
в виде строковой переменной с учетом условий, и передать полученную строку на
исполнение функции eval(). Вот маленький пример для иллюстрации:
function get_Object(obj_ID){
var obj;
var strVar;
switch (brouser){
case "IE":
strVar="document.all["+obj_ID+"]";
break;
case "NN":
strVar="document.layers["+obj_ID+"]";
break;
case "Mz":
strVar="document.getElementById("+obj_ID+")";
}
obj=eval(strVar);
return obj;
}
Конечно, из этого примера не видно острой неоходимости в использовании eval(),
тем не менее, в некоторых ситуациях она оказывается очень полезной. Только надо иметь ввиду, что
при объемных расчетах данная функция сильно "тормозит" работу уважаемого мной MS-IE,
а ранние версии Opera ее вобще не понимают.
Eсли Вы ищете качественный и недорогой web-хостинг, лично я рекомендую
PeterHost.Ru.
Российский, прекрасные каналы, сервис "на уровне".