Практика разработки Web-страниц

         

Сценарий работает в одном броузере, но не работает в другом


Если вы используете сценарии – или редактор, который создает сценарии вместо вас – вы можете получить код JavaScript, который хорошо работает в одних броузерах и выдает ошибки в других. Не у всех посетителей самый современный броузер, и если вы не создаете страницу для ограниченной аудитории, вы, скорее всего, хотите поддерживать хотя бы текущие версии Netscape и Internet Explorer. Но что касается версий 4, Internet Explorer и Netscape имеют некорые различия в JavaScript, по-разному поддерживают каскадные таблицы стилей (CSS) и используют разную объектную модель документа (Document Object Model, DOM) – поэтому они используют разные имена при обращении к объектам на странице. К счастью, последние версии этих броузеров поддерживают стандартную модель программирования, так что большинство кодов будут запускаться в обоих броузерах без каких-либо изменений.

Если ваш код сценария работает в одних броузерах и не работает в других, сделайте следующее.

  1. Если вы использовали редактор, который создает JavaScript или динамический код HTML, проверьте, установлены ли в программе опции совместимости броузеров – и не предназначены ли эффекты, которые вы пытаетесь использовать, лишь для нескольких броузеров. Помните, что некоторые броузеры, такие как WebTV и старые версии AOL, не поддерживают JavaScript.
  2. Если вы сами написали код JavaScript, попытайтесь определить, в каких областях была использована неправильная модель. Если ваш сценарий выдает ошибку, то в сообщении будет содержаться номер той строки страницы, в которой произошла эта ошибка, благодаря чему вы сможете исправить ее. (Более подробно об этом в разделе "Сценарии не работают или выдают ошибку".)
  3. Старайтесь проектировать страницу так, чтобы всегда можно было пропустить любую часть сценария или любое усовершенствование. Чтобы поддерживать посетителей, броузеры которых не поддерживают сценарии или вложенные объекты, включите альтернативный HTML в блоки <NOSCRIPT> и <NOEMBED>.

    В начале существования JavaScript преимущество было за Netscape, поскольку он сделал разработку JavaScript приоритетным направлением. Но в наши дни программная модель Internet Explorer стала практически стандартом. Вместе с огромным количеством посетителей, использующих Internet Explorer, вы, вероятно, захотите сосредоточиться на программировании для Internet Explorer, а затем спроектировать запасной вариант – возможно, содержащий только самые необходимые средства – для других броузеров.






  4. Следующий шаг – использовать разные эффекты или разные страницы для разных броузеров. Есть много способов определять тип броузера и реагировать на него, ниже приведены два самых простых. Вы можете проверить, располагает ли броузер теми объектами, которые вы хотите использовать. Предположим, вы хотите использовать код, который изменяет стили в зависимости от каких-нибудь событий на странице – это можно сделать, только если в версии броузера есть объекты styleSheet и коллекции styleSheet. Расположенный в разделе <HEAD> вашей страницы, этот сценарий переадресовывает посетителей с новыми версиями броузеров на другую страницу.

    <script language="JavaScript"> <!-- // Переадресация посетителей с Netscape 5+ и IE 4+ на новый сайт. if (document.styleSheets) window.location=’coolsite/’; //--> </script>

    Второй способ – это определить, какую версию броузера использует посетитель, а затем с помощью конструкции "if" спланировать в коде, когда какие усовершенствования вы будете использовать. Ниже приведен пример функции, которую можно использовать для определения версии броузера. После того, как вы включите ее в блок сценария в раздел <HEAD>, вы легко сможете проверить версию броузера, когда того потребует ваш сценарий. (Если вы хотите использовать отдельный код для каждой операционной системы или незначительной версии, поищите более сложную проверку.)

    function bVer() { /* bVer - Browser detection function To use, create a bVer object and refer to its properties: bv = new bVer(); если ( bv.ie4 || bv.ie5 || bv.nav5 ) { document.writeln("<p>This browser can do cool stuff.</p>"); } */ var br = navigator.userAgent.toLowerCase(); var ie = br.indexOf('msie'); var mz = br.indexOf('mozilla'); this.ie = (ie != -1); this.nav = ((ie == -1) && (mz != -1)) если (this.ie) { this.ver = Number(br.substring(ie+5, ie+6)); } else если (this.nav) { this.ver = Number(br.substring(mz+8, mz+9)); } this.ie3 = (this.ie && (this.ver == 3)); this.ie4 = (this.ie && (this.ver == 4)); this.ie5 = (this.ie && (this.ver >= 5)); this.nav4 = (this.nav && (this.ver == 4)); this.nav5 = (this.nav && (this.ver >= 5)); }

Общая проблема программирования – это различия между событиями в броузерах. Netscape признает события только для некоторых объектов. Например, событие click применяется к тэгам <A> и <INPUT> в Netscape, но не для тэгов <IMG> или <DIV>, как в Internet Explorer. Вдобавок, у Internet Explorer и Netscape разные стратэгии для управления событиями в коде. Для получения дополнительной информации об этих и других различиях обращайтесь на msdn.microsoft.com и developer.netscape.com.


Содержание раздела