Почему JavaScript и Яндекс Карты работают в браузере, но не открываются в ПолеHTMLДокумента 1С?

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

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

Разберем детально, почему это происходит, какие нюансы скрываются в работе встроенного веб-движка платформы 1С и как правильно подготовить HTML/JS код для корректного отображения карты.

Причина 1. Режим эмуляции Internet Explorer (ActiveX WebBrowser)

В обычном приложении 1С элемент формы ПолеHTMLДокумента использует системный компонент Windows — Microsoft WebBrowser Control (ActiveX). По умолчанию операционная система запускает этот компонент в устаревшем режиме совместимости с Internet Explorer 7, даже если в системе установлен IE11 или современный Edge.

Современные версии JavaScript-библиотек (включая API Яндекс Карт 2.1) не поддерживают стандарты IE7 и завершают работу с критическими синтаксическими ошибками.

Для принудительного перевода страницы в современный режим отображения необходимо добавить специальный метатег X-UA-Compatible внутри блока <head>:

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

Значение IE=edge заставляет встроенный браузер использовать наивысший доступный стандарт рендеринга (вплоть до IE11), что снимает ограничения устаревшего режима.

Причина 2. Ошибки в HTML-разметке и стилях CSS

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

  1. Некорректно закрытый тег контейнера: запись вида <div id="map" </div> содержит синтаксическую ошибку. Правильный вариант — <div id="map"></div>.
  2. Опечатка в названии CSS-свойства: указание widht: 100% вместо width: 100% приводит к тому, что контейнер для карты получает нулевую ширину или высоту, из-за чего карта не может отрисоваться.
  3. Вложенные теги <script>: вставка тега <script> внутрь исполняемого JS-кода функции вызывает немедленный сбой синтаксического анализатора.

Причина 3. Требования к подключению API Яндекс Карт

Актуальные версии API Яндекс Карт версии 2.1 требуют обязательной передачи API-ключа разработчика при подключении скрипта. Без валидного ключа запросы к тайлам карты и сервисам геокодирования могут блокироваться. Формат подключения должен выглядеть следующим образом:


<script src="https://api-maps.yandex.ru/2.1/?apikey=ВАШ_КЛЮЧ_API&lang=ru_RU" type="text/javascript"></script>

Пошаговое решение: рабочий пример для 1С

Соберем все исправления воедино и сформируем готовый программный код на встроенном языке 1С для вывода карты на форму:


Процедура ОбновитьКарту()

	ТекстHTML = "
	|<!DOCTYPE html>
	|<html>
	|	<head>
	|		<meta http-equiv='X-UA-Compatible' content='IE=edge'>
	|		<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
	|		<title>Отображение карты в 1С</title>
	|		<script src='https://api-maps.yandex.ru/2.1/?apikey=ВАШ_КЛЮЧ_API&lang=ru_RU' type='text/javascript'></script>
	|		<style>
	|			html, body {
	|				width: 100%;
	|				height: 100%;
	|				margin: 0;
	|				padding: 0;
	|			}
	|			#map {
	|				width: 100%;
	|				height: 100%;
	|			}
	|		</style>
	|		<script type='text/javascript'>
	|			var myMap;
	|			ymaps.ready(init);
	|
	|			function init() {
	|				myMap = new ymaps.Map('map', {
	|					center: [55.76, 37.64],
	|					zoom: 10
	|				}, {
	|					searchControlProvider: 'yandex#search'
	|				});
	|			}
	|		</script>
	|	</head>
	|	<body>
	|		<div id='map'></div>
	|	</body>
	|</html>";

	// Передаем сформированный текст в элемент управления
	ЭлементыФормы.ЯндексКарта.УстановитьТекст(ТекстHTML);

КонецПроцедуры

Альтернативное решение: глобальная настройка реестра Windows

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

  1. Откроем редактор реестра regedit.
  2. Перейдем в раздел:
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
    (для 32-разрядного клиента на 64-битной Windows также актуальна ветка в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\...).
  3. Создадим параметр типа DWORD (32 бита) с именем исполняемого файла платформы: 1cv8.exe (или 1cv8c.exe для тонкого клиента).
  4. Установим десятичное значение 11001 (или шестнадцатеричное 0x2AF9), что соответствует принудительному режиму стандартов IE11 Edge Mode.

После применения параметров реестра или добавления тега <meta http-equiv="X-UA-Compatible" content="IE=edge"> поле HTML-документа сможет корректно инициализировать скрипты карты и обрабатывать интерактивные действия пользователя.

← На главную