При работе с веб-содержимым внутри платформы 1С:Предприятие разработчики часто сталкиваются с неприятной проблемой: при открытии формы или загрузке страницы в элементе Поле HTML документа одно за другим начинают всплывать модальные окна Windows с текстом «Произошла ошибка сценария». Пользователю приходится многократно нажимать кнопки «Да» или «Нет», чтобы продолжить работу. При этом, если открыть ту же самую страницу напрямую в обычном браузере, всё отображается корректно и никаких ошибок не возникает.
В этой статье мы подробно разберем, почему возникает данная неполадка, проанализируем различные способы её обхода (как системные, так и программные) и выясним, как раз и навсегда избавить пользователей от раздражающих окон.
По умолчанию в операционной системе Windows элемент управления ПолеHTMLДокумента (в старых версиях платформы 1С) базируется на технологии ActiveX и использует системный компонент WebBrowser, тесно связанный с движком Internet Explorer. Главная техническая проблема заключается в том, что операционная система по умолчанию запускает этот компонент в режиме строгой совместимости с Internet Explorer 7 (IE7). Это происходит независимо от того, какая версия IE реально установлена на пользовательском компьютере (даже если это актуальный IE11).
Современные веб-сайты и сервисы активно используют современные стандарты JavaScript (ES6+), новые свойства CSS и элементы разметки HTML5. Устаревший движок рендеринга IE7 попросту не способен корректно интерпретировать современный код, что и приводит к лавинообразному появлению ошибок интерпретации скриптов.
---
Самый быстрый способ заглушить появление диалоговых окон без изменения программного кода — настроить параметры безопасности встроенного браузера Windows. Разберем этот процесс по шагам:
Win + R, введя команду control inetcpl.cpl и нажав Enter.Важное ограничение: этот метод полностью отключает выполнение любых сценариев JavaScript на загружаемых страницах. Окна ошибок действительно перестанут появляться, однако на интерактивных сайтах перестанут работать кнопки, формы отправки данных, динамические меню и другой полезный функционал.
---
Если страница загружается в 1С чисто для отображения статической информации (например, печатная форма, описание товара, справка) и вам не нужно взаимодействие с JavaScript, мы можем перехватить код страницы перед выводом на форму и удалить из него потенциально проблемные скрипты.
Для этого вместо прямого вызова метода Перейти() мы загружаем исходный текст страницы через HTTP-соединение, очищаем его и передаем в ПолеHTMLДокумента:
// Загружаем HTML-код страницы программно
Соединение = Новый HTTPСоединение("mysite.ru");
Запрос = Новый HTTPЗапрос("/info-page.html");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТекстHTML = Ответ.ПолучитьТелоКакСтроку();
// Вырезаем блоки скриптов с помощью простой автозамены
// В реальных задачах можно использовать регулярные выражения для более точной очистки
ТекстHTML = СтрЗаменить(ТекстHTML, "<script", "<!-- <script");
ТекстHTML = СтрЗаменить(ТекстHTML, "</script>", "</script> -->");
// Передаем очищенный код в элемент формы
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(ТекстHTML);
КонецЕсли;
Этот способ гарантированно решает проблему окон, но требует написания дополнительного кода обработки и, как и предыдущий вариант, лишает страницу интерактивности.
---
Если вам критически важно сохранить полную работоспособность всех скриптов и кнопок на веб-странице, лучшим решением будет заставить встроенный в 1С компонент WebBrowser использовать современный движок рендеринга (IE11) вместо устаревшего IE7.
Для этого необходимо внести соответствующие изменения в реестр операционной системы Windows, добавив исполняемые файлы платформы 1С в список исключений эмуляции браузера (FEATURE_BROWSER_EMULATION).
Выполните следующие шаги:
Win + R, введя regedit и нажав Enter.HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
1cv8.exe1cv8c.exe1cv8s.exe11001 (или 11000). Это значение сообщает операционной системе, что для данного приложения необходимо активировать движок рендеринга Internet Explorer 11 в режиме стандартов Edge HTML.После применения этих настроек встроенный браузер начнет обрабатывать скрипты по современным стандартам, и ошибки совместимости перестанут возникать.
---
Если вы имеете доступ к исходному коду веб-страницы или можете динамически внедрять теги в HTML-код перед выводом, воспользуйтесь перехватом ошибок на уровне JavaScript-движка. Для этого в самый верх страницы (в секцию <head>) нужно поместить глобальный обработчик ошибок:
<script type="text/javascript">
window.onerror = function(message, url, line) {
// Возвращая true, мы предотвращаем стандартную обработку ошибок браузером
// и блокируем появление модальных окон "Ошибка сценария" в Windows
return true;
};
</script>
Ошибки в коде JS при этом могут продолжать возникать, но они будут молча гаситься в фоновом режиме, не прерывая работу пользователя и не вызывая никаких диалоговых окон.
---
Если веб-страница, которую вы выводите в 1С, формируется на вашей стороне (например, генерируется из макета внутри конфигурации или отдается вашим собственным веб-сервером), обязательно добавьте в заголовок страницы специальный метатег совместимости:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
Этот тег принудительно указывает встроенному компоненту WebBrowser использовать самый последний и современный движок рендеринга, доступный в операционной системе Windows на данный момент, минуя дефолтный режим эмуляции IE7. Это наиболее элегантный и правильный способ решения проблемы "на лету" без изменения реестра клиентских машин.
---
Рассматривая проблему комплексно, нельзя обойти стороной радикальное и самое современное решение. Начиная с версии платформы 1С:Предприятие 8.3.14.1565, компания 1С полностью отказалась от использования устаревших компонентов Internet Explorer на операционных системах семейства Windows.
В современных релизах платформы для отрисовки элемента ПолеHTMLДокумента используется встроенная кроссплатформенная библиотека на базе движка WebKit (аналогично тому, как это давно было реализовано в клиентах под macOS и Linux). WebKit отлично оптимизирован, поддерживает современные стандарты HTML5, CSS3 и актуальные движки выполнения JavaScript. Если у вас есть техническая возможность обновить версию платформы 1С на клиентских рабочих местах до актуального релиза, сделайте это — все проблемы с ошибками сценариев исчезнут автоматически без каких-либо дополнительных манипуляций с реестром и кодом.