Nickolay.info. JavaScript. Хостинг от Яндекса и буква "b" |
Можете ли Вы предположить, что от имени переменной в скрипте может зависеть правильная или неправильная его работа? Если имена построены по правилам языка, на котором Вы пишете, такое предположение абсурдно. А вот на "народном" хостинге на момент написания заметки дело обстоит именно так.
Как оно часто бывает, я случайно обнаружил неправильную работу простого и старенького скрипта-игры Clicker. Ошибка заключалась в том, что во всех браузерах на строку, где было обращение к динамическому Javascript-массиву с именем b
(информация о картинках на игровом поле) выдавалась ошибка о несуществовании объекта b[i]
. Динамический двумерный массив на Javascript массив формировался так:
var board = new Array(); var c = new Array(); //... function InitBoard() { var i,j; for (i=0;i<size; i++) { b[i] = new Array(); c[i] = new Array(); for (j=0;j<size;j++) { b[i][j] = '0000.gif'; c[i][j] = 0; } } }
то есть, ничего необычного.
При этом Internet Explorer, как и всегда, со скриптом худо-бедно работал, а Opera и Firefox отказывались это делать напрочь, зато последний, тоже как всегда, позволил легко локализовать ошибку в своей консоли (меню Инструменты, Консоль ошибок).
После пары-тройки часов "отладки", при которой было перепробовано всё, что можно (если Вы имеете несчастье работать программистом, то знаете, как это бывает), я вспомнил, что этот скрипт должен болтаться на другом хостинге. К моему удивлению, там он заработал безупречно во всех браузерах (кроме того, что в "Опере", не подерживающей событие onUnload, не сохраняется игра при закрытии окна, о решении этой проблемы написано здесь). Но стоило скопировать работающий скрипт на "народный" хостинг (мелкие отличия между файлами всё равно были), как работа его закончилась.
После этого оставалось предположить только одно - при размещении скрипта на хостинге Народа.Ру нельзя называть динамический глобальный массив именем b
.
Так оно и оказалось. Вот по этой ссылке находится скрипт, где имя b
заменено на board
, и он работает:
index.html
А вот эта версия скрипта отличается только тем, что в ней оставлено старое имя b
:
index2.html
Интересно, об этом хоть где-нибудь написано?
Нетрудно догадаться, что проблема связана с рекламным блоком, добавляемым Яндексом на все страницы.
Была мысль написать об этом в саппорт Яндекса, но перечитал пользовательское соглашение, по которому "Яндекс" не отвечает вообще ни за что - и желание пропало полностью...
Хотя, пожалуй, отправлю в саппорт (support@narod.yandex.ru) вот это:
Здравствуйте,
меня заинтересовало, написано ли где-нибудь на "Яндексе", что в Javascript-коде, размещаемом на хостинге "Народа", нельзя называть глобальный массив именемb
.Вот две ссылки:
http://pers.narod.ru/jscript/clicker/index.html
http://pers.narod.ru/jscript/clicker/index2.htmlАдресуемые файлы отличаются только тем, что во втором (моя исходная версия) объект (динамическая матрица) называется
b
, а в первом это имя пришлось везде заменить наboard
. Первый в любом браузере работает, второй - нет (если и загрузилось за счёт общей для обоих файлов куки - достаточно нажать ссылку "Новая" и посмотреть в консоль ошибок).Отлаживать такие вещи жутко тяжело... догадываюсь, что проблема связана с рекламным блоком, добавляемым "Яндексом" на все страницы, потому что на другом хостинге всё работает и с именем массива
b
.В пользовательском соглашении Яндекса справедливо написано, что
Яндекс не гарантирует соответствие Сервиса целям и ожиданиям Пользователя Сервиса, его бесперебойную и безошибочную работу, но всё же хотелось бы какого-нибудь ответа, вдруг есть ещё такие "недопустимые" имена объектов?С уважением, PerS, преданный пользователь сервисов Яндекса с момента его открытия.
P.S. Ответ от ТП "Яндекса" поступил следующий:
Мы примем к сведению Вашу информацию, спасибо.
(Люда Смешнова, 15 марта)
P.P.S. И это ещё не всё - если сделать в HTML-документе закладку с именем
b
кодом
<a name=b>b</a>
получится "ведущая в никуда" ссылка, по крайней мере, в некоторых браузерах: b
Вот так в Опере 11.01 тоже не работает правильно: b
HTML-код:
<a name="b">b</a>
А в Internet Explorer 8 загрузка этой страницы приведёт просто к сообщению об ошибке Javascript.
гостевая; E-mail |