bdd2

«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) 58 05.09.14 13:35 Сейчас в теме
Используйте, по возможности, 1-ый способ, а ещё лучше 0-ой способ. На своей небольшой конфигурации проще исправить. С пользователями сражаться было сложнее.
А вот с типовыми и на поддержке... сложнее... Как говорится, 'требуйте в магазинах вашего города...'.
2. Игорь Антонов (dalgaso2010) 66 05.09.14 07:53 Сейчас в теме
(1) Franco, Увы, мне пришлось выбрать самый последний. Конфигурацию со временем доработаем, но на это нужно время, а его как всегда нет.
3. BabySG (BabySG) 06.09.14 15:45 Сейчас в теме
4. Игорь Антонов (dalgaso2010) 66 08.09.14 00:51 Сейчас в теме
(3) BabySG, а вы не могли бы скинуть комментарий в личку или здесь опубликовать (если позволяют правила)? У меня права не позволяют просматривать раздел по ссылке.
5. kholkin 46 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) 66 08.09.14 17:16 Сейчас в теме
(5) kholkin, Большое спасибо! Жаль, что у меня нет доступа к этому разделу. Смог бы сэкономить кучу времени.

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

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

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

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


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

обязательно 8.3 ставить (2 сервера 1С предприятия поднимать придется)
и какой релиз?
12. Антон Рощин (wolfsoft) 2408 10.09.14 10:47 Сейчас в теме
Не надо обновлять то, что работает. Геморою меньше будет ;)
13. Геннадий Зимин (kenza) 10.09.14 11:27 Сейчас в теме
Спасибо, за статью! Хоть есть время все исправить до того как вообще прекратят поддержку модальных окон.
14. Игорь Антонов (dalgaso2010) 66 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) 195 16.09.14 08:26 Сейчас в теме
У меня туева хуча народу через веб сидела и опа, болт! Я всех на тонкий клиент пересадил, работает быстрее и стабильнее.
17. Игорь Антонов (dalgaso2010) 66 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) 66 09.10.14 09:22 Сейчас в теме
(19) androgin,

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

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