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

Последний релиз популярного браузера 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 поступили мудро и оставили пути отступления, которыми можно пользоваться аж до мая 2024 года. Этого времени хватит, чтобы разработчики успели обновить свои решения.

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

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

На этом шаге редактор реестра можно закрывать и открывать 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_EffectiveUntil20240430» (без кавычек). После этого нажимаем «Ok» и аналогичную кнопку в окне «Включить устаревшие функции веб-платформы». Затем закрываем редактор локальных групповых политик.


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

30 Comments

  1. dalgaso2010

    (1) Franco, Увы, мне пришлось выбрать самый последний. Конфигурацию со временем доработаем, но на это нужно время, а его как всегда нет.

    Reply
  2. Franco

    Используйте, по возможности, 1-ый способ, а ещё лучше 0-ой способ. На своей небольшой конфигурации проще исправить. С пользователями сражаться было сложнее.

    А вот с типовыми и на поддержке… сложнее… Как говорится, ‘требуйте в магазинах вашего города…’.

    Reply
  3. BabySG

    Собственно, комментарий разработчиков https://partners.v8.1c.ru/forum/message/1272943#m_1272943

    Reply
  4. dalgaso2010

    (3) BabySG, а вы не могли бы скинуть комментарий в личку или здесь опубликовать (если позволяют правила)? У меня права не позволяют просматривать раздел по ссылке.

    Reply
  5. kholkin

    (4) вот что по ссылке

    Добрый день!

    Дело в том что в версии Chrome 37 поддержка модальных окон отключена:

    blog.chromium.org/2014/0… »»

    Пока еще можно принудительно включить их поддержку через политики Windows:

    http://www.chromium.org/adminis... »»

    1 мая 2015 г. эта возможность будет убрана.

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

    В браузере FireFox отказ от поддержки модальных окон также находится в планах:

    bugzilla.mozilla.org/sho… »»

    Reply
  6. DIMM10

    Спасибо за статью, теперь хоть понятно стало в чем проблема была.

    Reply
  7. dalgaso2010

    (5) kholkin, Большое спасибо! Жаль, что у меня нет доступа к этому разделу. Смог бы сэкономить кучу времени.

    (7) BillJR, Ну во-первых, я собираюсь перейти на 8.3. Моя конфигурация вполне позволяет это сделать безболезненно. Что касается «Вопрос» и «Предупреждение», то если мне не изменяет память, то в 8.3 появились альтернативные реализации подобным методам. Например, «ПоказатьПредупреждение». Вот их и буду использовать.

    Reply
  8. BillJR

    Интересно, как вы планируете переделать конфигурацию, чтобы в веб клиенте не появлялись служебные окна с ошибками или окна, открывающиеся при вызове метода Вопрос или Предупреждение и т.п. Чтобы это исправить необходимо изменять mainform_preload.js файл веб клиента и функцию Web.Core.showModalDialog в которой вызывается стандартный метод, который заблокирован в Chrome. В версии 8.3 данная проблема сведена к минимуму. Если мне не изменяет память, там появляется только одно модальное окно, в случае потери связи с сервером и невозможности выполнить запрос.

    Reply
  9. tindir

    Отлично! Спасибо. Спасительная статья. Я как сводовод (свод отчетов) был «бехумно рад» очередному обновлению хрома. Теперь реально стало ясно что и где. Работаю пока по пункту «переход на мазилу» собрал портабл для всех клиентов.

    Reply
  10. dalgaso2010

    (9) tindir,

    Рад помочь. Я на FireFox перевел часть клиентов, но почему-то он работает хуже с веб-клиентом, чем браузеры на web-kit. При скролинге больших справочников веб-клиент роняет Firefox. Причем эта ошибка проявляется в 8.3 чаще, чем в 8.2. Я плюнул на все и начал адаптировать конфигурацию. Тем более, что FireFox тоже скоро откажется от модальных окошек.

    Reply
  11. Serg O.

    от модальных окошек в коде… можно избавиться, адаптировать

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

    Сохранить, Сохранить в файл…

    даже «волшебный» [?] «О программе» — не работает

    это кнопки «платформы 1С» под web-клиента…

    обязательно 8.3 ставить (2 сервера 1С предприятия поднимать придется)

    и какой релиз?

    Reply
  12. wolfsoft

    Не надо обновлять то, что работает. Геморою меньше будет 😉

    Reply
  13. kenza

    Спасибо, за статью! Хоть есть время все исправить до того как вообще прекратят поддержку модальных окон.

    Reply
  14. dalgaso2010

    (11) Serg O.,

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

    Reply
  15. BabySG

    (11) Serg O., как уже сказали — только переход на 8.3

    Reply
  16. majmyl

    У меня туева хуча народу через веб сидела и опа, болт! Я всех на тонкий клиент пересадил, работает быстрее и стабильнее.

    Reply
  17. dalgaso2010

    (16) majmyl,

    Везет, нам перейти на тонкий клиент не удается ((( Ну уже почти допили корректную работу веб-клиента 🙂

    Reply
  18. MasterIt

    Мы еще пол года назад перешли на 8.3, и судя по всему не зря.

    Reply
  19. androgin

    А что мешает переписать модальные окна?

    1С ведь обошла это уже давно…

    Reply
  20. dalgaso2010

    (19) androgin,

    Перейти ничего не мешает, мы уже перешли по факту. Если свои конфигурации актуализировать проблем нет, то типовые не так уж просто.

    Reply
  21. stanru1

    (19) androgin, например, то, что в веб клиенте не работает меню файл — открыть, или не работает типовой выбор периода.

    (0)

    Автор статьи, у тебя ошибка, похоже. Если править реестр руками, надо называть ключ не «1С», а «1».

    За информацию огромное спасибо!

    Reply
  22. adhocprog

    Спасибо за полезную информацию!

    Reply
  23. androgin

    (21) stanru1,

    Это почему же не работает Открыть?

    Reply
  24. boln

    Оригинально! Респект.

    Reply
  25. Nicholas

    У меня почти одновременно на двух компьютерах (на рабочем и на домашнем) появилась вот такая ошибка:

    b.setProxy is not a function

    Причем не важно под каким браузером, например, в IE ошибка выгладит вот так:

    Object doesn’t support property or method ‘setProxy’ 

    Посоветуйте, пожалуйста, в каком направлении искать корень проблемы?

    Reply
  26. user826905

    Спасибо огромное дружище! Все работает!

    Reply
  27. user996325

    Извините, но зачем так себя мучить если в 1С есть тонкий клиент, где можно указать web-сервер и работать без проблем с браузером.

    Reply
  28. dalgaso2010

    (27)

    Можно, но тонкий клиент надо еще доставить конечным пользователям. Если пользователей очень много и они находятся за пределами компании, то задача становится очень сложной.

    Reply
  29. alext88

    (25) Удалось решить проблему? Столкнулся с такой же проблемой

    Reply
  30. dalgaso2010

    (29) Обновите версию платформы. На какой-то из версий была схожая проблема. Кстати, в одной из 8.3.10 была проблема с окном ввода логина и пароля (веб-клиент). Тоже ошибки в клиентском коде валились. Помогло обновление.

    Ах, да. Еще ошибка (setProxy) может быть из-за отсутствия поддержки какой-то фичи в браузере. Напишите точную версию платформы и версию браузера в которой смотрите.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *