Персональный блог Игоря Антонова aka "spider_net"

Undefined is not function или почему перестал работать веб-клиент 1С в Google Chrome 37


Рубрика: 1С:Предприятие -> Программирование
Метки: | | | | |
Просмотров: 14096
Undefined is not function или почему перестал работать веб-клиент 1С в Google Chrome 37

Последний релиз популярного браузера Google Chrome помимо новшеств очередных новшеств и багфиксов принес головную боль 1С-разработчикам. Проблема проявляется при использовании веб–клиента в браузере Google Chrome 37 и всех остальных бродилках на web-kit’е (например, Opera).

Проблема проявляется во всех местах конфигурации, где используются вызов модальных окон. При попытке вызвать модальное окно Google Chrome 37 выплевывает ошибку: «Underfined is not function» (1C). При нажатии единственной кнопки «ok» веб-клиент 1С сгенерирует стандартное сообщение «Открытие нового окна было заблокировано, видимо сработал блокировщик всплывающих окон» и предложит перезапустить приложение. Перезапуск вернет на окно авторизации и дальше все по кругу.

Мой проект на текущей стадии не был готов к использованию новых функций (для отказа от модальности), поэтому на этапах вызова окна загрузки файлов и вызова любого модального окна я ловил «Underfined is not function».

screen1.png

Способ решение #1

Самый простой способ решить программу – попросить клиентов перейти на Mozilla FireFox. Там подобная проблема не проявляется и в целом все работает хорошо. Именно так я и поступил. Однако, у некоторых клиентов начали возникать проблемы при скролинге элементов в формах списков. По непонятным причинам FireFox генерировал ошибку и браузер падал. Ошибка проявлялась не у всех, но ждать пока с проблемой столкнуться все пользователи я не мог.

Способ решения #2

Дальше я решил попробовать перевести проблемных клиентов на старые версии браузера Google Chrome. Мне удалось раздобыть в сети дистрибутив «Google Chrome 32» и он успешно был внедрен нескольким клиентам с отключенной функцией автоматического обновления. Способ опять же рабочий, но не элегантный – нельзя же всех лишить возможности обновления браузера.

Способ решения #3

Предыдущие способы имеют явные минусы, поэтому я решил отправиться и почитать информацию из ChangeLog’а к последней версии Google Chrome. Поиск по слову «modal» вывел меня на пункт, где четко говорилось, что поддержка функции showModalDialog() в новой версии Google Chrome удалена. Отлично, уже хоть что-то.

Перейдя в детальное описание этой фичи, я увидел, что при необходимости данную функцию можно активировать (!!!). Разработчики Google Chrome поступили мудро и оставили пути отступления, которыми можно пользоваться аж до мая 2015 года. Этого времени хватит, чтобы разработчики успели обновить свои решения.

Теперь собственно говоря само решение. Открываем редактор реестра Windows (regedit) и переходим в раздел «HKEY_LOCAL_MACHINESOFTWAREPolicies». Здесь вам нужно создать новые разделы: «GoogleChromeEnableDeprecatedWebPlatformFeatures» (см. рисунок ниже).

screen3.png

После переходите в раздел «EnableDeprecatedWebPlatformFeatures» и создайте в нем строковый ключ с именем «1С» и присвойте ему значение «ShowModalDialog_EffectiveUntil20150430». Должно получиться что-то вроде этого:

screen2.png

На этом шаге редактор реестра можно закрывать и открывать Google Chrome. В адресной строке бродилки вводим: «chrome://policy/» (без кавычек) и переходим по этому адресу. Должна открываться страница с политиками Chrome.

Изначально она будет пустой. Нажимаем кнопку «Повторно загрузить политики». Если вы все сделали правильно в реестре, то после нажатия кнопку вы увидите табличку c одной записью о функции «showModalDialog» (см. рисунок).

screen4.png

Все! Теперь никаких ошибок в веб-клиенте не будет. Ваши клиенты смогу продолжать работать, а вы получите время для адаптации конфигурации к нововведениям. Чтобы немного облегчить процесс, я сделал экспорт описанных выше ключей в файлик. Можете его загрузить и импортировать в свой реестр. Экспорт делал в Windows 7.

Исправление ошибки веб-клиента в Google Chrome 37: chrome37_fix_by_spider_net.zip

P.S. Если ваш компьютер не входит в домен, то данное решение не поможет. В таких случаях подойдет решение из второй части заметки

Оставьте комментарий!
comments powered by HyperComments