Сценарий работает в одном броузере, но не работает в другом
Если вы используете сценарии – или редактор, который создает сценарии вместо вас – вы можете получить код JavaScript, который хорошо работает в одних броузерах и выдает ошибки в других. Не у всех посетителей самый современный броузер, и если вы не создаете страницу для ограниченной аудитории, вы, скорее всего, хотите поддерживать хотя бы текущие версии Netscape и Internet Explorer. Но что касается версий 4, Internet Explorer и Netscape имеют некорые различия в JavaScript, по-разному поддерживают каскадные таблицы стилей (CSS) и используют разную объектную модель документа (Document Object Model, DOM) – поэтому они используют разные имена при обращении к объектам на странице. К счастью, последние версии этих броузеров поддерживают стандартную модель программирования, так что большинство кодов будут запускаться в обоих броузерах без каких-либо изменений.
Если ваш код сценария работает в одних броузерах и не работает в других, сделайте следующее.
- Если вы использовали редактор, который создает JavaScript или динамический код HTML, проверьте, установлены ли в программе опции совместимости броузеров – и не предназначены ли эффекты, которые вы пытаетесь использовать, лишь для нескольких броузеров. Помните, что некоторые броузеры, такие как WebTV и старые версии AOL, не поддерживают JavaScript.
- Если вы сами написали код JavaScript, попытайтесь определить, в каких областях была использована неправильная модель. Если ваш сценарий выдает ошибку, то в сообщении будет содержаться номер той строки страницы, в которой произошла эта ошибка, благодаря чему вы сможете исправить ее. (Более подробно об этом в разделе "Сценарии не работают или выдают ошибку".)
-
Старайтесь проектировать страницу так, чтобы всегда можно было пропустить любую часть сценария или любое усовершенствование. Чтобы поддерживать посетителей, броузеры которых не поддерживают сценарии или вложенные объекты, включите альтернативный HTML в блоки <NOSCRIPT> и <NOEMBED>.
В начале существования JavaScript преимущество было за Netscape, поскольку он сделал разработку JavaScript приоритетным направлением. Но в наши дни программная модель Internet Explorer стала практически стандартом. Вместе с огромным количеством посетителей, использующих Internet Explorer, вы, вероятно, захотите сосредоточиться на программировании для Internet Explorer, а затем спроектировать запасной вариант – возможно, содержащий только самые необходимые средства – для других броузеров.
Следующий шаг – использовать разные эффекты или разные страницы для разных броузеров. Есть много способов определять тип броузера и реагировать на него, ниже приведены два самых простых. Вы можете проверить, располагает ли броузер теми объектами, которые вы хотите использовать. Предположим, вы хотите использовать код, который изменяет стили в зависимости от каких-нибудь событий на странице – это можно сделать, только если в версии броузера есть объекты 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.
Содержание раздела