Как исправить ошибку и убрать предупреждение безопасности в поле HTML документа в 1С?

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

При интеграции интерактивных веб-страниц (например, скриптов Яндекс Карт) в форму 1С через элемент Поле HTML документа разработчики часто сталкиваются с ситуацией, когда скрипты блокируются, карта не отображается, либо операционная система выводит диалоговое окно с предупреждением об ограничении активного содержимого и элементов ActiveX. Разберем по шагам, почему возникает эта проблема и какими способами можно обеспечить корректную работу скриптов в 1С.

Выясним причину блокировки сценариев

Проанализируем ситуацию: в версиях платформы 1С:Предприятие до 8.3.13 включительно для отображения поля HTML документа в операционной системе Windows используется встроенный системный движок MSHTML (компонент Internet Explorer). Когда HTML-страница генерируется во временный файл и открывается по протоколу file://, в действие вступает механизм безопасности Windows — Local Machine Zone Lockdown (блокировка зоны локального компьютера).

По умолчанию Internet Explorer расценивает любые локальные файлы с JavaScript или элементами ActiveX как потенциально опасные и блокирует их исполнение. Изменение стандартных настроек на вкладке «Безопасность» в свойствах обозревателя зачастую не дает результата, так как зона «Мой компьютер» является скрытой и защищена системными политиками.

Кроме того, встроенный контейнер MSHTML в старых релизах платформы запускается в режиме глубокой обратной совместимости (IE7 Quirks Mode), что приводит к сбоям синтаксиса JavaScript и невозможности инициализации современных скриптов API карт.

Решение 1. Указание режима совместимости через метатег (X-UA-Compatible)

Самый простой и эффективный способ обойти ограничения движка рендеринга без изменения настроек на клиентских рабочих станциях — принудительно указать движку Internet Explorer целевой режим работы через метатег в секции <head> HTML-кода.

Посмотрим на пример структуры HTML-документа, в котором задан режим совместимости с Internet Explorer 9:


<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=9"/>
    <meta charset="utf-8"/>
    <title>Яндекс Карты в 1С</title>
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ВАШ_КЛЮЧ" type="text/javascript"></script>
</head>
<body style="margin: 0; padding: 0;">
    <div id="map" style="width: 100%; height: 100vh;"></div>
</body>
</html>

Директива <meta http-equiv="X-UA-Compatible" content="IE=9"/> переключает парсер в стандарты IE9, отключая устаревшие механизмы эмуляции, благодаря чему страница со скриптами Яндекс Карт начинает загружаться без ошибок и диалоговых окон.

Решение 2. Добавление метки веб-зоны (Mark of the Web)

Если страница продолжает выдавать предупреждение безопасности при открытии из локального файла, применим механизм Mark of the Web (MOTW). Данный комментарий указывает Windows, что локальный файл следует воспринимать так, будто он был получен из доверенной зоны «Интернет».

Добавим специальный комментарий в самую первую строку документа, строго до тега <!DOCTYPE>:


<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta charset="utf-8"/>
</head>
<body>
    <!-- Содержимое страницы -->
</body>
</html>

Параметр (0014) задает длину строки about:internet. Наличие этой строки отключает жесткую блокировку Local Machine Zone Lockdown, разрешая выполнение JavaScript.

Решение 3. Настройка эмуляции браузера через системный реестр Windows

Рассмотрим вариант системной настройки для рабочих мест, где используется старый движок платформы. Мы можем явно указать операционной системе, какую версию движка должен использовать исполняемый файл 1С:

  1. Откроем редактор реестра regedit.
  2. Перейдем в ветку реестра: HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION (для настройки текущего пользователя) либо аналогичный путь в HKLM (для всех пользователей компьютера).
  3. Создадим новый параметр типа REG_DWORD с именем 1cv8.exe (а также 1cv8c.exe для тонкого клиента).
  4. Установим десятичное значение 11001 (или 9999 для принудительного режима IE9 Standards Mode).

Это переведет встроенный компонент отображения веб-страниц внутри 1С в современный режим рендеринга.

Решение 4. Разрешение активного содержимого в параметрах операционной системы

Разберем по шагам, как отключить системное предупреждение о скриптах, если другие методы недоступны:

  1. Откроем «Панель управления» Windows и перейдем в раздел «Свойства браузера» (или «Свойства интернета»).
  2. Перейдем на вкладку «Дополнительно».
  3. Прокрутим список настроек до блока «Безопасность».
  4. Установим флажок «Разрешать активное содержимое файлов для запуска на моем компьютере».
  5. Нажмем «Применить» и перезагрузим сеанс 1С:Предприятия.

Особенности версий платформы 1С:Предприятие и работа с API карт

Рассмотрим важные архитектурные различия между версиями платформы, которые необходимо учитывать при разработке:

  1. Смена движка рендеринга: Начиная с версии 8.3.14, платформа 1С:Предприятие на платформе Windows отказалась от использования системного Internet Explorer в пользу встроенного движка на базе WebKit. Обновление платформы на актуальную версию полностью снимает проблемы с зонами безопасности Windows, поддержкой современного JavaScript (ES6+) и предупреждениями ActiveX.
  2. Различия в объектной модели документа (DOM): При обращении к методам страницы из встроенного языка 1С через свойство Элементы.ИмяПоля.Документ доступ к окну различается:

    В старых версиях (движок IE):

    
    Окно = Элементы.ПолеHTML.Документ.parentWindow;
    Окно.ИнициализироватьКарту();
    

    В новых версиях платформы (WebKit) и в веб-клиенте:

    
    Окно = Элементы.ПолеHTML.Документ.defaultView;
    Окно.ИнициализироватьКарту();
    
  3. Использование протоколов и ключей API: Современные версии API Яндекс Карт требуют обязательного параметра apikey при подключении скрипта и должны работать по защищенному протоколу HTTPS. Открытие карты через локальный протокол file:// может приводить к блокировке сетевых запросов тайлов из-за политик CORS. Для надежной работы рекомендуется отдавать HTML-код карты через HTTP-сервис базы 1С или формировать страницу динамически, передавая строку HTML напрямую в реквизит формы типа Строка, связанный с полем HTML документа.
← На главную