]]>
ваш баннер
]]>

Ошибки в JavaScript. Лишняя запятая и браузеры.

21 декабря, 2007

Знаете, бывают ошибки, на которых сколько не учись, все равно убьешь кучу времени. Думаю, каждый программист с ними сталкивался. На днях так «повезло» и мне.

Дело было так. Добавляю я эффекты из Scriptaculous, и, естественно, настраиваю их параметры. Все идет отлично. Эффекты работают как надо, работа кипит.

Тестирую, как обычно, в FireFox. Все прекрасно работает. Начинаю проверять в IE и Opera.

И тут возникает проблема. Один эффект не работает. Ни в какую. Причем я точно знаю, что сам эффект должен работать (использовал его раньше). Складывается впечатление, что не вызывается сама JavaScript функция.

Код был такой.

Code (javascript)
  1. new Effect.Highlight(‘textBlock’, {
  2. startcolor:"#DFDC00",
  3.     endcolor:"#FFFFFF", duration: 2,
  4.     queue: {position: ‘end’, scope: ‘myqueue’},
  5. });

Короче, провозился я полчаса. В конце концов, до меня дошло, что лишняя запятая в конце массива с параметрами вызывает ошибку. (Эта запятая осталось случайно после экспериментов с параметрами).

Вроде бы ничего сложного. Но получается, что FireFox (с установленным плагином Firebug) исправил ошибку автоматически и даже предупреждения не вывел.
А я, естественно, начал думать, что это глюки браузеров.

Ошибка, конечно, пустяковая, но полчаса времени на ее исправление, плюс не самые приятные ощущения – это далеко не пустяк.

Может кто-то знает надежный способ отладки JavaScript кода (а заодно и CSS)?

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в JavaScript, Разное

]]>

Комментарии (14)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. vasa_c 21.12.2007 в 11:10 (Ответить)

    Firefox и без firebug нормально работает. И не сказать, что это именно ошибка. В PHP, например, так же определения могут завершаться запятой — полезная фишка.
    IE же достаточно четко говорит об ошибке (что с ним бывает не часто) — “требуется идентификатор, строка или число” с указанием строки с ошибкой.

  2. Владимир 21.12.2007 в 12:48 (Ответить)

    firebug я вспомнил только потому, что он предназначен для отладки кода, а даже предупреждения не вывел.

    Что касается запятой. Мне кажется, у языка должен быть четкий синтаксис. А в данном случае, если запятая стоит перед закрывающей скобкой, это можно трактовать как отсутствие параметра, как пустой параметр или как ошибку.

    В общем, главная проблема в том, что браузеры обрабатывают код по-разному.

  3. Scratch 03.01.2008 в 15:16 (Ответить)

    К слову, последняя версия FireBug, если включен режим “предупреждения JavaScript”, уведомляет о том, что запятая после списка элементов объекта не соответствует стандарту ECMA.
    Что позволяет исправить множество таких ошибок.

  4. Владимир 03.01.2008 в 15:28 (Ответить)

    Спасибо!
    У меня действительно оказалась довольно старая версия.

  5. tenshi 09.01.2008 в 15:58 (Ответить)

    вывод - не надо экономить строчки

    new Effect.Highlight(‘textBlock’, {
    startcolor: "#DFDC00"
    ,
    endcolor: "#FFFFFF"
    ,
    duration: 2
    ,
    queue:{ position: ‘end’, scope: ‘myqueue’ }
    })

  6. tenshi 09.01.2008 в 15:59 (Ответить)

    мдес, отступы не сохранились…

  7. Scratch 09.01.2008 в 16:38 (Ответить)

    А есть еще такой способ:

    new Effect.Highlight(‘textBlock’, {
    startcolor: “#DFDC00″
    ,endcolor: “#FFFFFF”
    ,duration: 2
    ,queue:{ position: ‘end’, scope: ‘myqueue’ }
    })

    То есть — запятая ставится _перед_ строчкой. В этом случае поставить лишнюю запятую сложно, а на отсутствие запятой любой браузер начнет ругаться.

  8. Владимир 09.01.2008 в 17:10 (Ответить)

    Не плохо. Только, вы сами написали ‘textBlock’, {
    :-)

    В общем я согласен, нужно сразу нормально форматировать код. Ошибка ведь возникла не из-за того, что я написал лишнюю запятую, а потому что я скопировал и вставил параметр из другого эффекта вместе с запятой. Если бы я его сразу отформатировал, то проблем бы не было.

  9. Scratch 09.01.2008 в 17:13 (Ответить)

    Если вы о моем примере — то это несколько не тот случай.
    Не нужно путать запятую, которая разделяет элементы объекта, и запятую в списке параметров :))

    Ну, и вообще, лучший способ — это, конечно, использовать нормальный редактор (типа Аптаны), для подсветки таких вот проблем. :)

  10. Владимир 09.01.2008 в 17:20 (Ответить)

    Вообще-то, я просто пошутил :-)

    Насчет Аптаны согласен, просто иногда удобно пользоваться чем-нибудь по-проще (Notepad++ или PsPad)

  11. Scratch 09.01.2008 в 17:26 (Ответить)

    А, да, они такое не умеют.
    Ну, тогда — ставить Script Debugger от майкрософта (под тот же IE). Обычно, когда он открывает ошибочную строчку, сразу понятно что не так. :)
    (сам уже месяц ем и нахваливаю, с нашей-то js-разработкой)

  12. Владимир 09.01.2008 в 20:36 (Ответить)

    Script Debugger, нужно будет попробовать.
    Хотя мне не нравится IE.
    К тому же Firebug (для FF) очень не плохо работает.

  13. Scratch 09.01.2008 в 21:00 (Ответить)

    Увы, для отладки кода в IE ничего лучше Script Debugger не придумали.
    А отлаживать код в IE нужно (не писать на сайте — “не работает в IE”, в самом деле).
    И бывают случаи, в основном — связанные с различием DOM моделей и событий — которые простой проверкой синтаксиса не обойдешь…

    Как пример — есть такая штука, ExtJS. В ней есть элемень — grid. Удобная штука, все хорошо, но — если элемент grid перезагрузить после того, как “несущий” элемент удален из dom дерева, то IE выдает ошибку, а FireFox и Opera вполне нормально это переносят.

    Откуда вывод — отлаживать нужно именно в IE, и эту ошибку как-то поймать.
    Вот тут Script Debugger очень полезен.

  14. Владимир 09.01.2008 в 22:14 (Ответить)

    Отладкой приходится заниматься во всех браузерах :-) . А проигнорировать IE, к сожалению, можно будет очень не скоро. (Когда я последний раз смотрел статистику этого блога, его использовало примерно 60% посетителей).

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>