Первый в мире Правильный Броузер
или маздай* ли Netscape 6?

Почему Netscape 6 не имеет права на жизнь

С момента официального выхода броузера Netscape 6 15 ноября прошлого года аргументации этого утверждения были посвящены сотни (если не тысячи) горячих дискуссий в различных русских форумах, листах рассылки и на страницах бумажных изданий. Слабые голоса защитников Netscape 6 безнадежно утонули в мощном потоке претензий и обвинений, исторгаемых как поклонниками IE**, так и смертельно обиженными давними фанатами Netscape. Чудовищная требовательность броузера к ресурсам на фоне повсеместной технологической отсталости оборудования «среднего русского пользователя», видимо, особенно помогла тому, что в России новый броузер Netscape был практически повсеместно проклят. (Иначе, на мой взгляд, невозможно объяснить себе, например, такой странный факт: броузерная статистика ведущего русского «счетчика» Spylog до сих пор не содержит данных по N6*** в явном виде.) Публикации простирались от вдумчивой и серьезной критики Максима Отставнова («Компьютерра», http://www.softerra.ru/review/internet/netscape/6039/) до эмоциональных и яростных обвинений в использовании «порнотехнологий», которые Сергей Scout Кащавцев лично бросил в лицо Netscape/AOL со страниц «Софтерры» (softerra.ru). Реакция западного пользователя была много спокойнее, но тоже не без эксцессов: так, по сообщению все того же Отставнова, некто Дэвид Фланаган, «используя сайт OpenSource.OReilly.com как трибуну», призвал AOL вообще не выпускать N6 как финальную версию, продолжая шлифовать «бэты», и даже собрал под эту идею довольно много подписей.

Внимательно наблюдая за всеми этими перепетиями, я постепенно выстрадал некоторый «конденсат» претензий к N6, существенных лично для меня как для пользователя и веб-разработчика, с которыми я и собираюсь с вами поделиться:
– N6 требует мощного компьютера и все равно работает медленно;
– N6 не совместим по коду с NN4**** (!);
– N6 не признает «обычного» кода и требует «правильный» код, написанный в соответствии со спецификациями W3C;
– «правильный» код N6 интерпретирует тоже с ошибками;
– N6 сделан в соответствии с отвратительной идеей «все в одном»;
– N6 полон «глюков» и «багов».

В соответствии со всем вышеизложенным, Netscape 6 не имеет будущего, пользователей и однозначно маздай.

Почему Netscape несомненно должен жить

Сделав вывод, которым кончается прошлый абзац, я успокоился и прожил в безмятежности целых пол-года, не шевельнув даже и пальцем, чтобы сделать свои проекты совместимыми с ужасным монстром. Однако червь беспокойства (сначала совсем незаметный, а потом все более и более назойливый) точил меня. Все-таки, как-то это неправильно — новый броузер, легендарный Netscape опять же...

Однако основной движущей силой переориентации, как это ни странно, стала давняя и уже спокойно-перманентная моя ненависть к Netscape-у старому, Communicator-у так называемому, которую поймет и разделит всякий веб-разработчик, если он, конечно, профессионал и не «яблочник».

Написать красивый и логичный код, прекрасно работающий в IE, а потом корежить и уродовать его в угоду капризному монстру — какое программистское сердце это выдержит? Или в сотый раз убедиться, что то, что по идее должно работать — нормально работает только в IE, а в NN4 нуждается в преобразовании в нелогичный и дурацкий формат... Необходимость изготовления матрешек из таблиц только потому, что NN4 думает, что он лучше знает как красить border, нерешаемая проблема с отображением русских букв в слоях, дурацкий тег <layer> и бесчисленные, бесконечные «глюки» и странности — все это тихонько клокочет внутри уже не первый год. И даже рассуждая без эмоций, объективно, все равно приходится признать: NN4 тормозит развитие Сети и затрудняет внедрение новых технологий, поскольку разработчики приводят свои сайты к некоему безопасному «общему знаменателю» броузеров, который в данном случае есть самый убогий минимум. Создание же нескольких версий сайта под разные броузеры — весьма трудозатратно и удел лишь наиболее профессиональных и добросовестных.

И вот, в момент особенно унылых и тягостных размышлений по поводу предстоящей мучительной «заточки» очередного проекта под NN4, меня осенила спасительная идея: а может, делать сразу под N6, перепрыгнув через этого треклятого «четвертого»? После некоторого раздумья мысль была признана нелепой по очевидным причинам малой распространенности N6 и в связи с существованием еще в интернете упорной, просто-таки остервенелой кучки пользователей NN4 размером в целых 18 (по нашей статистике) процентов. И ведь понять-то их можно: на не-Windows платформах альтернативы NN4 просто нет (точнее, не было до N6)!

Как бы-то ни было, а процесс пошел. Я отправился в Сеть и скачал оттуда целую гору документации по вопросам создания страниц, совместимых с N6. (Особенно порадовал в этом смысле сайт zvon.org, рекомендую.) Оказалось, что спецификации эти не есть документация от Netscape, но официальные описания стандартов, разрабатываемых консорциумом W3C, что несколько затрудняет их восприятие из-за традиционной наукообразности изложения. (Кстати, отсутствие документации по N6 на сайте Netscape пол-года назад было одной из самых веских причин отказа от его поддержки.)

После нескольких дней экспериментов проявился поразительный результат: N6 доказал мне свое право на жизнь. Вот те достоинства, которые обнаружились в процессе работы:

1. N6 ориентирован на стандарты, за которыми, все-таки, будущее.

Известно, что каждый веб-мастер хотя бы один раз в жизни видел сон, где он находится в особом месте, называемом «веб-мастерский рай». В этом месте все броузеры, несмотря на их обилие и разнообразие, совершенно одинаковы с точки зрения разработчика: все они одинаково интерпретируют один и тот же код, все имеют прекрасные, гибкие, универсальные методы для манипуляций с данными, (в том числе и сколько угодно динамическими), прекрасно поддерживают все мировые языки и наречия, не «глючат» и не «падают».

Повсеместность этих видений была такова, что некая группа отважных лиц затеяла проект построения такого рая в одном отдельно взятом интернете. В результате возник консорциум W3C, уже не первый год создающий стандарты и спецификации и проект mozilla.org, уже не первый год создающий броузер, эти стандарты и спецификации поддерживающий. Движок этого броузера называется Gecko, и именно он визуализирует веб-страницы в N6. Так что поддержка N6 для нас, веб-разработчиков, это не просто удовлетворение капризов заказчика, но дело принципа: построение вполе реального «рая», причем своими собственными руками.

2. В этом году выйдет в свет броузер Mozilla, имеющий тот же движок что и N6.

Создаваемый по модели open source, Mozilla имеет все шансы потеснить на рынке броузеров даже IE, а поддержка его у вас будет уже готова, если только вы признаете право на существование N6, который использует тот же самый движок Gecko, что и Mozilla. К тому же, броузер Mozilla выбран штатным броузером для Linux-среды GNOME, и, по видимому, не будет иметь конкурентов в будущих системах на основе Unix/Linux.

3. Отсутствие дурной наследственности NN4.

Очень хорошо, что корпорации иногда проигрывают в конкурентной борьбе. Ведь, возможно, именно это и явилось причиной открытия компанией Netscape исходных текстов Communicator, в результате чего движок броузера был переписан заново. Свободные разработчики брезгливо отвернулись от такого «родственничка», как NN4, справедливо решив, что если уж делать, то делать хорошо. В результате новый Netscape, хотя и имеет свои собственные странности, все же лишен основных недостатков своего предшественника, в числе наиболее существенных из которых хочется упомянуть неспособность старого Navigator-а динамически перерисовывать содержимое странички при изменении размера окна, глюки с русскими буквами в слоях, «кривую» поддержку стилевых листов, отсутствие реальной динамической объектной модели. Собственно, решительно все, чем попрекают NN4, новому Navigator-у не свойственно.

4. Близость к IE.

Тестируя свои странички в N6 я открыл поразительую (на первый взгляд) вещь: версии документов, сделанные для NN4, выглядят в N6 просто несравнимо хуже, чем их IE-версии. Более того, позже стало ясно, что модификация страниц, совместимых с IE, для их совместимости с N6, является совершенно нетрудным делом. И об этом стоит поговорить подробнее.

Как угодить N6?

Для того, чтобы превратить страничку, созданную для броузера IE в N6-совместимую версию, вам нужно:

– заменить все элементы <layer>, загружающие при помощи параметра src внешний файл, на <iframe> с аналогичными параметрами (имейте в виду, что массив document.layers[] в N6 тоже приказал долго жить);

– заменить все элементы <layer>, не использующие внешние файлы, на <div> с соответствующими параметрами;

– не использовать коллекции document.all, document.tags, document.ids, document.classes, document.elementName и document.contextual;

– вместо них использовать конструкции типа element = document.getElementById("id") или anks = document.getElementsByTagName("a") для доступа к элементам страницы по id или типу html-тэга;

– для определения местоположения элемента использовать parseInt (element.style.top) вместо element.style.pixelTopparseInt (element.style.left) вместо element.style.pixelLeft);

– для перемещения элемента использовать конструкции типа element.style.left = value + "px"; вместо element.style.pixelLeft = x; (element.style.top = value + "px"; вместо element.style.pixelTop = y;);

– скорее всего, проделать еще ряд не упомянутых здесь манипуляций ;).

«Глюки» и «баги», которые нужно обходить: в N6 не поддерживается вложенность тегов HTML <DL> в <DD> (как ни стыдно в этом признаваться, я просто-напросто не знаю значений этих тегов :), теряется форматирование ячеек в таблице при выполнении предусмотренных спецификациями CSS и DOM операций (по слухам, минимизация/максимизация окна броузера вызывает исчезновение текста таблицы, а также из своего опыта: при динамическом изменении цвета фона таблицы броузер «забывал» параметр «cellpadding» — выкрутился я с помощью задания того же самого свойства, но при помощи стилевых листов), также некоторые странности в поведении, которые сложно классифицировать но весьма просто обнаружить. :)

И еще. Поддержка столь дорогого сердцу разработчика свойства innerHTML броузера IE, позволявшего легко и просто динамически модифицировать код страницы, по многочисленным просьбам, пока оставлена и в N6. Однако у этого свойства нет будущего! Причина — в том, что свойство innerHTML не включено в текущие спецификации W3C. Поэтому из соображений дальновидности и предусмотрительности от него, видимо, придется постепенно отвыкать...

Опознание N6

Совершенно не претендуя на истину в последней инстанции, хочу предложить следующий код для ответа на вопрос, является ли текущий броузер броузером N6 (или Mozilla):

isN6=document.getElementById;

Значение «true» переменной isN6 соответствует положительному ответу на этот вопрос.

Однако в этом правиле есть исключение: IE5 также положительно отвечает на этот вопрос! (Хотя он и не совместим на 100% со стандартами W3C.) Поэтому для распознавания «обманщика» придется пользоваться обычными методами типа

isIE=document.all;

которые, в случае N6, возвращают «undefined».

Т.о., окончательный результат выглядит так:

if (isN6 && !isIE) то это есть не что иное, как N6/Mozilla.

Впрочем, вместо этих сложностей, никто не мешает вам использовать обычные методы анализа полей объекта navigator.

Отладка Javascript в N6

Отладка страниц под N6 — это одно сплошное удовольствие. Система выдачи сообщений об ошибках Javascript чрезвычайно удобна. Она заметно отличается как от всплывающих окошек с невнятными жалобами IE, так и от отдельного специального url для сообщений об ошибках в NN4.

Первые кроме малой информативности имеют еще два существенных недостатка. Во-первых, с их помощью не представляется возможным определить номер строки с ошибкой в том случае, если файл со скриптами «приаттачивается» к html-документу при помощи свойства src тега <script>. И, во-вторых, отвязаться от всплывающих окошек при большом количестве ошибок (например, «неисправный» цикл) часто удается лишь путем принудительного закрытия броузера в списке задач.

Второй ужасно неудобен, хотя и радует сердце настоящего***** программиста доведенным до маразма культом единообразия, свойственным старому Navigator-у: и соообщения об ошибках Javascript, и, например, информация о разработчиках «About» доступны здесь посредством специальных url-образных команд типа «javascript:» или «about:», для которых приходится открывать отдельное окно, поскольку, даже запущенные через меню, они запросто занимают место последней открытой вами страницы. (Кстати, эти шаманские заклинания всегда напоминали мне секретные слова, даровавшие бессмертие в старых играх типа «лабиринт», что позже оказалось не так уж и далеко от истины: определенное их сочетание активизирует спрятанные программистами Netscape «пасхальные яйца» — попробуйте, например, набрать в NN4 «about:mozilla». Если понравилось — идите на yandex.ru и ищите «пасхальные яйца». :)

В N6 разработчики объединили оба подхода, искоренив недостатки и развив преимущества. Так, в меню N6 теперь имеется специальный раздел Tasks/Tools, в котором, помимо History и утилиты иморта, имеются Java Console и Javascript Console. Эти «консоли» представляют собой открывающиеся в отдельном окне «логи» ошибок и предупреждений, простые, удобные и корректно отображающие номера строк, содержащих ошибку. Вместе с тем своеобычная реализация команды About сохранилась, но теперь она открывается в отдельном окне с загадочным «протоколом» «chrome:». Нет, все-таки Netscape, это все еще своего рода религия, а не просто программа просмотра веб-страниц! ;)

Ко всему прочему, Netscape 6 наконец избавлен (по крайней мере, на первый взгляд) от двух своих самых ужасных недостатков старых времен: от необъяснимых и непредсказуемых падений, вызываемых некоторыми, на первый взгляд, совершенно безобидными, участками кода (и способных вызывать припадки гневливости даже у самых хладнокровных веб-мастеров), а также от возмутительных зависаний, случавшихся с некоторым javascript-кодом средней и выше-средней сложности (как например, код системы Spylog), победить которые можно было только перезагрузкой компьютера (!).

И последняя замеченная ложка меду: теперь в настройке N6 можно явно указать, какая кодировка будет выставляться по умолчанию, а, значит, и расстаться с глубоко укоренившейся привычкой включать кодировку Windows-1251 сразу после старта броузера. Кстати, это, быть может, и правильнее, чем запоминать последнюю кодировку, как это делает IE. Что ж, еще один аргумент в поддержку заголовка.

My Sidebar

Именно эта новая особенность N6, на мой взгляд, и вызвала упомянутые упреки Netscape в «использовании порнотехнологий». Представляя собой раскрывающуюся в левой части окна броузера полосу с вкладками, каждая из которых представляет собой отдельную мини-веб-страничку, My Sidebar по умолчанию оказывается полон ссылок на проекты самой Netscape, да на сайты ее партнеров. Однако, при более близком знакомстве с My Sidebar, выясняется, что можно произвольно добавлять/удалять вкладки, настраивая My Sidebar согласно своим предпочтениям.

В чем же смысл этой технологии? Страницы My Sidebar предназначены для отображения новостей, анонсов, последних поступлений и т.п. контента соответствующих веб-проектов. Призванные всегда содержать «горячую» информацию, страницы My Sidebar непрерывно обновляются с периодом, который разработчик может задавать сам.

Откуда же берутся такие страницы? Вот тут-то и обнаруживается самое интересное. Страницы My Sidebar создаются (если создаются) самими разработчиками веб-сайтов. Наверное, среднему пользователю Сети технология My Sidebar не обязательно покажется какой-то особенно выдающейся, а может, и вообще будет малоинтересна. Но для веб-разработчика она весьма забавна. Дело в том, что странички для вкладок My Sidebar являются полноценными веб-страницами, поддерживающими Javascript, CSS и способными загружать контент в основное окно броузера. Единственное, что вы должны помнить при разработке — максимальная ширина My Sidebar — 162 пиксела без вертикальной полосы прокрутки и 144 с ней. Да и это неважно, если вас не беспокоит наличие горизонтального скроллинга.

В общем, широкий простор для оригинальных идей и смелых задумок. Большинство крупных западных проектов, таких как CNN.com или ZDNet.com, уже подготовили свои страницы для Netscape My Sidebar. В соответствующем разделе сайта Netscape (http://search.netscape.com/mysidebar.tmpl) их собрана уже целая коллекция. Имеется в Сети и русский каталог страниц My Sidebar: он расположен по адресу http://sidebar.ru .

Итоги

В общем, не знаю, удалось ли мне вас убедить, но, по-моему, Netscape 6, при всей своей неоднозначности, вовсе не является результатом отчаянных усилий проигравшей компании исправить положение, выпущенным скорее по инерции, чем из коммерческих соображений. Это — серьезный и продуманный очередной шаг в направлении, за которое программисты всегда любили Netscape: в направлении стандартизации самого глобального на сегодняшний день средства коммуникации между людьми — средства, которое называется World Wide Web.

* — must die — должен умереть (англ.) — популярное выражение
** — везде: Internet Explorer версии 4 или выше
*** — везде: Netscape 6
**** — везде: Netscape Navigator 4.x
***** — что-то давно не всплывала на страницах компьютерной прессы тема «настоящих» и «ненастоящих» программистов — помнится, сколько копий было сломано... ;)

Иван Кублаханов, весна 2001 г.

Опубликовано на сайте «Computerra.Ru» 31 мая 2001 г.
http://www.computerra.ru/online/influence/10075/