Ваш сайт не работает в Опере? Используйте неминифицированные библиотеки

Один из заказчиков жалуется, что в браузере Opera, на сайте пропадает вся динамика. Т.е. - не работает JavaScript. Решил я с этим делом разобраться:
Первым делом скачал и установил Оперу. Проверил на боевом сервере - да, ошибка воспроизводится. Проверил на тестовой версии сайта на своем компьютере - тоже воспроизводится. Хорошо!
Привычно запустил Fiddler, чтобы знать что именно получает браузер от сервера. Первая неприятность - Fiddler не перехватывает запросы от Оперы. Ок, попробую обойтись без него.
Вижу что в Опере, как во многих других браузерах, есть достаточно мощный встроенный отладчик. Запустил его и вижу, что на вкладке Errors - целых 119 ошибок. Ага, все не так страшно - 116 из них это упоминания в стилях свойств, которые Опера не поддерживает.
Но 3 ошибки относятся к JavaScript. Беглый взгляд на них все объясняет: почему-то не смогла инициализироваться библиотека jQuery. Причина в этом:

Syntax error at line 2 while loading: expected ')', got keyword 'in'
or(i.isArray(t)||(t in e?t=[t]:(t=i.came
--------------------^

Синтаксическая ошибка в самой библиотеке jQuery? При том, что в других браузерах ошибок нет? Маловероятно.

Чтобы понять на какой именно код жалуется браузер - поменял ссылку, чтобы использовать неминифицированную версию jQuery. Перегружаю страницу - ошибки нет.
Вооруженный достаточными подробностями для поиска в Google, быстро нашел такую информацию:

AjaxMin *is* producing ES5.1-compliant code; Opera incorrectly implements the spec. If you read the spec, the NoIn production only goes down to the RelationaExpressionNoIn level. Because the in-operator in this case is enclosed within parentheses, it is actually under the PrimaryExpression construct, which does not have a separate NoIn flavor. It is perfectly valid code, as all other browsers recognize. Opera is wrong here. Someone had reported this before, and I thought I put in a flag or some other fix for this; I'll check the source history.

На этой же странице есть сообщение о том, что необходимые изменения уже внесены в Оперу, просто эти изменения еще не стали публичными.

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

Коментарі

Unknown каже…
У Оперы с версией 12.10 такой проблемы уже нет.

Популярні дописи з цього блогу

OAuth-аутентификация через ВКонтакте

Українська мова