Многие разработчики сталкивались с ситуацией, когда привычный функционал отображения карт в 1С внезапно перестает работать. В поле HTML документа вместо ожидаемой карты выводится либо пустой экран, либо фрагменты исходного кода JavaScript и CSS, хотя тот же самый файл, открытый напрямую через браузер, отображается корректно. Проанализируем причины этой проблемы и разберем по шагам доступные способы ее решения.
Выясним причину, по которой 1С ведет себя иначе, чем обычный браузер. До версии платформы 8.3.14 элемент управления ПолеHTMLДокумента в операционной системе Windows использовал движок Internet Explorer (Trident). Однако существовал критически важный нюанс: по умолчанию встроенный компонент WebBrowser запускался в режиме совместимости с IE7, независимо от того, какая версия браузера (IE11 или Edge) установлена в системе.
Современные скрипты Google Maps API активно используют стандарты HTML5 и последние версии JavaScript, которые не поддерживаются движком IE7. Именно поэтому мы видим ситуацию, когда код «обрезается» или интерпретируется как обычный текст. Рассмотрим типичный пример кода, который вызывает затруднения в старых версиях платформы:
var directionDisplay;
var directionsService = new google.maps.DirectionsService;
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer;
var chicago = new google.maps.LatLng(55.81234, 37.664425);
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: chicago
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
directionsDisplay.setMap(map);
}
В данном примере объекты google.maps просто не могут быть инициализированы в устаревшем движке, что приводит к остановке выполнения скрипта.
Это самый эффективный и рекомендуемый способ. Начиная с версии 8.3.14, компания «1С» перевела клиентские приложения для Windows на современный движок WebKit. Это позволило унифицировать работу элементов управления во всех операционных системах и избавиться от зависимости от настроек Internet Explorer.
Проанализируем преимущества этого перехода:
Текст.Если по каким-то причинам вы не можете обновить платформу немедленно, рассмотрим вариант принудительного переключения движка IE в современный режим. Для этого необходимо внести изменения в системный реестр Windows. Нам нужно указать исполняемому файлу 1cv8.exe использовать режим IE11.
Разберем алгоритм действий:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION.1cv8.exe (или 1cv8c.exe для тонкого клиента).11001 (в десятичной системе) или 0x2AF9 (в шестнадцатеричной).Это заставит встроенный компонент использовать рендеринг IE11, что может временно решить проблему с отображением карт.
Посмотрим на пример использования мета-тега, который сообщает браузеру, какой движок использовать. Мы можем добавить в заголовок head нашего HTML-кода следующую строку:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
Важное замечание: Этот метод часто оказывается неэффективным внутри 1С, если не выполнены настройки реестра, описанные выше. Приоритет настроек операционной системы для компоненты WebBrowser обычно выше, чем настройки внутри самого HTML-документа.
Проанализируем ситуацию, описанную в сообщениях форума, когда код HTML обрезается в неожиданном месте. Это происходит из-за технических ограничений передачи больших строк через свойство Текст объекта ПолеHTMLДокумента в старых версиях Trident.
Чтобы избежать этой проблемы, рекомендуется использовать метод Перейти() (или Navigate). Вместо прямой передачи текста в поле:
.html.Элементы.ПолеHTML.Перейти(ПутьКФайлу).Такой подход гарантирует, что движок загрузит файл целиком без искажений и потерь данных.
Если поддержка Google Maps становится слишком трудозатратной из-за ограничений безопасности или необходимости наличия платного API-ключа, можно рассмотреть использование Яндекс.Карт. Исторически API Яндекс.Карт дольше сохраняло обратную совместимость с компонентами IE, что делало их более стабильными для работы в старых версиях 1С.
Подведем итог: наиболее правильным и современным решением является обновление платформы до актуальных релизов (начиная с 8.3.14). Это полностью снимает вопросы совместимости и позволяет использовать все возможности современного веба внутри интерфейса 1С.