При разработке интеграций с картографическими сервисами часто возникает ситуация: в стандартном веб-браузере HTML-страница со скриптом Яндекс Карт открывается без нареканий, однако при попытке загрузить тот же самый код в элемент формы ПолеHTMLДокумента в среде 1С возникает ошибка скрипта или карта вовсе не отображается.
Разберем детально, почему это происходит, какие нюансы скрываются в работе встроенного веб-движка платформы 1С и как правильно подготовить HTML/JS код для корректного отображения карты.
В обычном приложении 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), что снимает ограничения устаревшего режима.
Проанализируем исходный код страницы. В нем часто встречаются ошибки верстки, которые современный браузер Chrome может автоматически простить, но строгий парсер Internet Explorer воспринимает критично:
<div id="map" </div> содержит синтаксическую ошибку. Правильный вариант — <div id="map"></div>.widht: 100% вместо width: 100% приводит к тому, что контейнер для карты получает нулевую ширину или высоту, из-за чего карта не может отрисоваться.<script> внутрь исполняемого JS-кода функции вызывает немедленный сбой синтаксического анализатора.Актуальные версии API Яндекс Карт версии 2.1 требуют обязательной передачи API-ключа разработчика при подключении скрипта. Без валидного ключа запросы к тайлам карты и сервисам геокодирования могут блокироваться. Формат подключения должен выглядеть следующим образом:
<script src="https://api-maps.yandex.ru/2.1/?apikey=ВАШ_КЛЮЧ_API&lang=ru_RU" type="text/javascript"></script>
Соберем все исправления воедино и сформируем готовый программный код на встроенном языке 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);
КонецПроцедуры
Если требуется гарантировать запуск всех встроенных браузеров платформы 1С в режиме IE11 без модификации каждого метатега, настроим параметры реестра операционной системы:
regedit.HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\...).1cv8.exe (или 1cv8c.exe для тонкого клиента).0x2AF9), что соответствует принудительному режиму стандартов IE11 Edge Mode.После применения параметров реестра или добавления тега <meta http-equiv="X-UA-Compatible" content="IE=edge"> поле HTML-документа сможет корректно инициализировать скрипты карты и обрабатывать интерактивные действия пользователя.