gifts2017

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

Опубликовал Игорь Антонов (dalgaso2010) в раздел Администрирование - Системное

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



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

Переписать участки кода с вызовом модальных окон в соответствии с рекомендациями компании "1С". Мой проект на текущей стадии не был готов к использованию новых функций, поэтому на этапах вызова окна загрузки файлов и вызова любого модального окна я ловил [bold]«Underfined is not function»[/bold].




Способ решение #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_MACHINE\SOFTWARE\Policies». Здесь вам нужно создать новые разделы:«Google\Chrome\EnableDeprecatedWebPlatformFeatures»





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





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


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



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

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

Если не помогло

Я проверил рассмотренный в заметке способ на двадцати пользователях – все прекрасно заработало. Не повезло 21-му. Все ключи в реестр импортировались нормально, но на странице chrome://policy так ничего и не появилось. Оказалось, что подобные проблемы с политиками Chrome не только у меня. У пользователей на «StackOverflow» возникали аналогичные ситуации, и оказалось, что способ с добавлением ключей в реестр работает только у тех, чьи компьютеры входят в домен. Мой компьютер и машины тех 20 пользователей входят в домены, поэтому у нас все заработало сразу. Я опять принялся искать решение проблемы и в итоге нашел. Способ чуть сложней, но в итоге проблема решилась окончательно.

Итак, если ваш компьютер не входит в домен, и вы столкнулись с ошибкой веб-клиента 1С «underfined is not function» выполните несколько шагов:

  • Загружаем по этой ссылке административный шаблон настроек политик Chrome. По ссылке доступен adm шаблон. Если требуется в формате admx или json для Linux, то качаем полный архив с шаблонами отсюда (http://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip). Распаковываем в какую-нибудь директорию.
  • Открываем консоль локальных групповых политик gpedit.msc (например, через «пуск» -> «Выполнить»).

  • Раскрываем узел «Конфигурация компьютера» и кликаем правой кнопкой мыши по «Административные шаблоны». В контекстном меню выбираем «Добавление или удаление шаблонов».

  • В появившемся окне нажимаем кнопку «Добавить» и выбираем файл «chrome.adm», который мы извлекли из загруженного в пункте 1 архива. Наш шаблон должен появиться в списке текущих шаблонов политики. Нажимаем кнопку «Закрыть».

  • Переходим в узел «Административные шаблоны» -> «Классические административные шаблоны» -> «Google» . В этом узле ищем пункт «Включить устаревшие функции веб-платформы».

  • Дважды кликаем по нему и в появившемся окне устанавливаем переключатель на позицию «Включить». В разделе «Параметры» активируется кнопка «Показать». Нажимаем ее.

  • В появившемся окне кликаем по первой строке и вводим: «ShowModalDialog_EffectiveUntil20150430» (без кавычек). После этого нажимаем «Ok» и аналогичную кнопку в окне «Включить устаревшие функции веб-платформы». Затем закрываем редактор локальных групповых политик.


  • Открываем в Google Chrome уже знакомую страницу «chrome://policy» и кликаем по кнопке «Повторно загрузить политики».
 Теперь все должно работать, как и изначально было задумано.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Франко Деллиани (Franco) 05.09.14 13:35
Используйте, по возможности, 1-ый способ, а ещё лучше 0-ой способ. На своей небольшой конфигурации проще исправить. С пользователями сражаться было сложнее.
А вот с типовыми и на поддержке... сложнее... Как говорится, 'требуйте в магазинах вашего города...'.
2. Игорь Антонов (dalgaso2010) 05.09.14 07:53
(1) Franco, Увы, мне пришлось выбрать самый последний. Конфигурацию со временем доработаем, но на это нужно время, а его как всегда нет.
3. BabySG (BabySG) 06.09.14 15:45
4. Игорь Антонов (dalgaso2010) 08.09.14 00:51
(3) BabySG, а вы не могли бы скинуть комментарий в личку или здесь опубликовать (если позволяют правила)? У меня права не позволяют просматривать раздел по ссылке.
5. kholkin 08.09.14 11:56
(4) dalgaso2010, вот что по ссылке
Добрый день!
Дело в том что в версии Chrome 37 поддержка модальных окон отключена:
blog.chromium.org/2014/0... »»

Пока еще можно принудительно включить их поддержку через политики Windows:
www.chromium.org/adminis... »»
1 мая 2015 г. эта возможность будет убрана.

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

В браузере FireFox отказ от поддержки модальных окон также находится в планах:
bugzilla.mozilla.org/sho... »»
dalgaso2010; +1 Ответить 1
6. Дмитрий Мазуров (DIMM10) 08.09.14 14:50
Спасибо за статью, теперь хоть понятно стало в чем проблема была.
7. Вилли Врангель (BillJR) 08.09.14 22:20
Интересно, как вы планируете переделать конфигурацию, чтобы в веб клиенте не появлялись служебные окна с ошибками или окна, открывающиеся при вызове метода Вопрос или Предупреждение и т.п. Чтобы это исправить необходимо изменять mainform_preload.js файл веб клиента и функцию Web.Core.showModalDialog в которой вызывается стандартный метод, который заблокирован в Chrome. В версии 8.3 данная проблема сведена к минимуму. Если мне не изменяет память, там появляется только одно модальное окно, в случае потери связи с сервером и невозможности выполнить запрос.
8. Игорь Антонов (dalgaso2010) 08.09.14 17:16
(5) kholkin, Большое спасибо! Жаль, что у меня нет доступа к этому разделу. Смог бы сэкономить кучу времени.

(7) BillJR, Ну во-первых, я собираюсь перейти на 8.3. Моя конфигурация вполне позволяет это сделать безболезненно. Что касается "Вопрос" и "Предупреждение", то если мне не изменяет память, то в 8.3 появились альтернативные реализации подобным методам. Например, "ПоказатьПредупреждение". Вот их и буду использовать.
9. Tindir Mindir (tindir) 09.09.14 10:20
Отлично! Спасибо. Спасительная статья. Я как сводовод (свод отчетов) был "бехумно рад" очередному обновлению хрома. Теперь реально стало ясно что и где. Работаю пока по пункту "переход на мазилу" собрал портабл для всех клиентов.
10. Игорь Антонов (dalgaso2010) 09.09.14 21:04
(9) tindir,

Рад помочь. Я на FireFox перевел часть клиентов, но почему-то он работает хуже с веб-клиентом, чем браузеры на web-kit. При скролинге больших справочников веб-клиент роняет Firefox. Причем эта ошибка проявляется в 8.3 чаще, чем в 8.2. Я плюнул на все и начал адаптировать конфигурацию. Тем более, что FireFox тоже скоро откажется от модальных окошек.
11. Сергей Огородников (Serg O.) 10.09.14 10:35
от модальных окошек в коде... можно избавиться, адаптировать

А ЧТО ДЕЛАТЬ с кнопками среды?

Сохранить, Сохранить в файл...
даже "волшебный" [?] "О программе" - не работает


это кнопки "платформы 1С" под web-клиента...

обязательно 8.3 ставить (2 сервера 1С предприятия поднимать придется)
и какой релиз?
12. Антон Рощин (wolfsoft) 10.09.14 10:47
Не надо обновлять то, что работает. Геморою меньше будет ;)
13. Геннадий Зимин (kenza) 10.09.14 11:27
Спасибо, за статью! Хоть есть время все исправить до того как вообще прекратят поддержку модальных окон.
14. Игорь Антонов (dalgaso2010) 10.09.14 23:01
(11) Serg O.,

Насколько я понял, в 8.3 никаких проблем с выше перечисленными кнопками вроде нет. А в 8.2 уже вряд ли будут эту ошибку исправлять. Придется мигрировать на 8.3.

15. BabySG (BabySG) 11.09.14 11:17
(11) Serg O., как уже сказали - только переход на 8.3
16. majmyl Hauanov (majmyl) 16.09.14 08:26
У меня туева хуча народу через веб сидела и опа, болт! Я всех на тонкий клиент пересадил, работает быстрее и стабильнее.
17. Игорь Антонов (dalgaso2010) 16.09.14 20:00
(16) majmyl,

Везет, нам перейти на тонкий клиент не удается ((( Ну уже почти допили корректную работу веб-клиента :-)
18. Дмитрий Иванов (MasterIt) 17.09.14 13:48
Мы еще пол года назад перешли на 8.3, и судя по всему не зря.
19. Виктор Назаров (androgin) 20.09.14 15:17
А что мешает переписать модальные окна?
1С ведь обошла это уже давно...
20. Игорь Антонов (dalgaso2010) 09.10.14 09:22
(19) androgin,

Перейти ничего не мешает, мы уже перешли по факту. Если свои конфигурации актуализировать проблем нет, то типовые не так уж просто.
21. Станислав Раташнюк (stanru1) 30.10.14 11:43
(19) androgin, например, то, что в веб клиенте не работает меню файл - открыть, или не работает типовой выбор периода.

(0)
Автор статьи, у тебя ошибка, похоже. Если править реестр руками, надо называть ключ не "1С", а "1".
За информацию огромное спасибо!
22. Владимир Гусев (adhocprog) 18.11.14 17:37
Спасибо за полезную информацию!
23. Виктор Назаров (androgin) 25.12.14 04:15
(21) stanru1,
Это почему же не работает Открыть?
Прикрепленные файлы:
24. Николай Больсунов (boln) 01.07.16 13:33
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа