Как устранить ошибку сценария в Поле HTML документа 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с веб-содержимым внутри платформы 1С:Предприятие разработчики часто сталкиваются с неприятной проблемой: при открытии формы или загрузке страницы в элементе Поле HTML документа одно за другим начинают всплывать модальные окна Windows с текстом «Произошла ошибка сценария». Пользователю приходится многократно нажимать кнопки «Да» или «Нет», чтобы продолжить работу. При этом, если открыть ту же самую страницу напрямую в обычном браузере, всё отображается корректно и никаких ошибок не возникает.

В этой статье мы подробно разберем, почему возникает данная неполадка, проанализируем различные способы её обхода (как системные, так и программные) и выясним, как раз и навсегда избавить пользователей от раздражающих окон.

Выясняем причину: почему возникает ошибка?

По умолчанию в операционной системе Windows элемент управления ПолеHTMLДокумента (в старых версиях платформы 1С) базируется на технологии ActiveX и использует системный компонент WebBrowser, тесно связанный с движком Internet Explorer. Главная техническая проблема заключается в том, что операционная система по умолчанию запускает этот компонент в режиме строгой совместимости с Internet Explorer 7 (IE7). Это происходит независимо от того, какая версия IE реально установлена на пользовательском компьютере (даже если это актуальный IE11).

Современные веб-сайты и сервисы активно используют современные стандарты JavaScript (ES6+), новые свойства CSS и элементы разметки HTML5. Устаревший движок рендеринга IE7 попросту не способен корректно интерпретировать современный код, что и приводит к лавинообразному появлению ошибок интерпретации скриптов.

---

Вариант 1. Изменение настроек безопасности Internet Explorer (Простой системный метод)

Самый быстрый способ заглушить появление диалоговых окон без изменения программного кода — настроить параметры безопасности встроенного браузера Windows. Разберем этот процесс по шагам:

  1. Откройте классическую Панель управления Windows и перейдите в раздел «Свойства обозревателя» (или «Свойства браузера»). Также это окно можно вызвать, нажав комбинацию клавиш Win + R, введя команду control inetcpl.cpl и нажав Enter.
  2. Перейдите на вкладку «Безопасность».
  3. Выберите зону «Интернет» и нажмите кнопку «Другой...» (настройка уровня безопасности).
  4. Прокрутите список параметров вниз до раздела «Сценарии» (Scripting).
  5. Найдите пункт «Активные сценарии» (Active Scripting) и переведите его в состояние «Отключить».
  6. Нажмите «ОК» и примените изменения.

Важное ограничение: этот метод полностью отключает выполнение любых сценариев JavaScript на загружаемых страницах. Окна ошибок действительно перестанут появляться, однако на интерактивных сайтах перестанут работать кнопки, формы отправки данных, динамические меню и другой полезный функционал.

---

Вариант 2. Программное вырезание скриптов из HTML-кода (Метод очистки контента)

Если страница загружается в 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);
КонецЕсли;

Этот способ гарантированно решает проблему окон, но требует написания дополнительного кода обработки и, как и предыдущий вариант, лишает страницу интерактивности.

---

Вариант 3. Принудительное включение режима IE11 через реестр Windows (Рекомендуемый системный метод)

Если вам критически важно сохранить полную работоспособность всех скриптов и кнопок на веб-странице, лучшим решением будет заставить встроенный в 1С компонент WebBrowser использовать современный движок рендеринга (IE11) вместо устаревшего IE7.

Для этого необходимо внести соответствующие изменения в реестр операционной системы Windows, добавив исполняемые файлы платформы 1С в список исключений эмуляции браузера (FEATURE_BROWSER_EMULATION).

Выполните следующие шаги:

  1. Откройте редактор реестра, нажав Win + R, введя regedit и нажав Enter.
  2. Перейдите по следующему пути (для 64-битных версий Windows и 64-битной платформы 1С):

    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

    Если вы используете 32-битную версию платформы 1С на 64-битной операционной системе Windows, перейдите в ветку:

    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

  3. Создайте внутри этого раздела новые параметры типа DWORD (32 бита) для каждого исполняемого файла платформы 1С, который вы используете:
    • Для основного режима предприятия: 1cv8.exe
    • Для тонкого клиента: 1cv8c.exe
    • Для стартера 1С: 1cv8s.exe
  4. Дважды кликните по созданному параметру, переключите систему исчисления в Десятичную (Decimal) и установите значение 11001 (или 11000). Это значение сообщает операционной системе, что для данного приложения необходимо активировать движок рендеринга Internet Explorer 11 в режиме стандартов Edge HTML.
  5. Перезапустите 1С:Предприятие.

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

---

Вариант 4. Программный перехват ошибок на стороне JS (Метод window.onerror)

Если вы имеете доступ к исходному коду веб-страницы или можете динамически внедрять теги в HTML-код перед выводом, воспользуйтесь перехватом ошибок на уровне JavaScript-движка. Для этого в самый верх страницы (в секцию <head>) нужно поместить глобальный обработчик ошибок:


<script type="text/javascript">
window.onerror = function(message, url, line) {
    // Возвращая true, мы предотвращаем стандартную обработку ошибок браузером
    // и блокируем появление модальных окон "Ошибка сценария" в Windows
    return true; 
};
</script>

Ошибки в коде JS при этом могут продолжать возникать, но они будут молча гаситься в фоновом режиме, не прерывая работу пользователя и не вызывая никаких диалоговых окон.

---

Вариант 5. Использование метатега адаптации (Для собственного веб-контента)

Если веб-страница, которую вы выводите в 1С, формируется на вашей стороне (например, генерируется из макета внутри конфигурации или отдается вашим собственным веб-сервером), обязательно добавьте в заголовок страницы специальный метатег совместимости:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Этот тег принудительно указывает встроенному компоненту WebBrowser использовать самый последний и современный движок рендеринга, доступный в операционной системе Windows на данный момент, минуя дефолтный режим эмуляции IE7. Это наиболее элегантный и правильный способ решения проблемы "на лету" без изменения реестра клиентских машин.

---

Вариант 6. Переход на современную платформу 1С (Движок WebKit)

Рассматривая проблему комплексно, нельзя обойти стороной радикальное и самое современное решение. Начиная с версии платформы 1С:Предприятие 8.3.14.1565, компания 1С полностью отказалась от использования устаревших компонентов Internet Explorer на операционных системах семейства Windows.

В современных релизах платформы для отрисовки элемента ПолеHTMLДокумента используется встроенная кроссплатформенная библиотека на базе движка WebKit (аналогично тому, как это давно было реализовано в клиентах под macOS и Linux). WebKit отлично оптимизирован, поддерживает современные стандарты HTML5, CSS3 и актуальные движки выполнения JavaScript. Если у вас есть техническая возможность обновить версию платформы 1С на клиентских рабочих местах до актуального релиза, сделайте это — все проблемы с ошибками сценариев исчезнут автоматически без каких-либо дополнительных манипуляций с реестром и кодом.

← На главную