Почему Google Карты перестали работать в поле HTML документа 1С и как это исправить

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

Многие разработчики сталкивались с ситуацией, когда привычный функционал отображения карт в 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 просто не могут быть инициализированы в устаревшем движке, что приводит к остановке выполнения скрипта.

Решение №1: Обновление платформы до версии 8.3.14 и выше

Это самый эффективный и рекомендуемый способ. Начиная с версии 8.3.14, компания «1С» перевела клиентские приложения для Windows на современный движок WebKit. Это позволило унифицировать работу элементов управления во всех операционных системах и избавиться от зависимости от настроек Internet Explorer.

Проанализируем преимущества этого перехода:

  1. Поддержка современных стандартов: WebKit корректно обрабатывает современные JS-фреймворки и CSS-стили, используемые Google Maps.
  2. Отсутствие правок кода: Как отмечают пользователи, после перехода на новую платформу старый код начинает работать без каких-либо изменений.
  3. Стабильность: Исчезают проблемы с «обрезанием» текста HTML-документа при передаче больших объемов данных в свойство Текст.

Решение №2: Настройка режима эмуляции через реестр (для старых платформ)

Если по каким-то причинам вы не можете обновить платформу немедленно, рассмотрим вариант принудительного переключения движка IE в современный режим. Для этого необходимо внести изменения в системный реестр Windows. Нам нужно указать исполняемому файлу 1cv8.exe использовать режим IE11.

Разберем алгоритм действий:

  1. Откройте редактор реестра (regedit).
  2. Перейдите в ветку HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION.
  3. Создайте новый параметр DWORD (32 бита).
  4. В качестве имени укажите 1cv8.exe (или 1cv8c.exe для тонкого клиента).
  5. В качестве значения установите 11001 (в десятичной системе) или 0x2AF9 (в шестнадцатеричной).

Это заставит встроенный компонент использовать рендеринг IE11, что может временно решить проблему с отображением карт.

Решение №3: Использование мета-тега совместимости

Посмотрим на пример использования мета-тега, который сообщает браузеру, какой движок использовать. Мы можем добавить в заголовок head нашего HTML-кода следующую строку:

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

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

Проблема обрезки кода и передача данных

Проанализируем ситуацию, описанную в сообщениях форума, когда код HTML обрезается в неожиданном месте. Это происходит из-за технических ограничений передачи больших строк через свойство Текст объекта ПолеHTMLДокумента в старых версиях Trident.

Чтобы избежать этой проблемы, рекомендуется использовать метод Перейти() (или Navigate). Вместо прямой передачи текста в поле:

  1. Сохраните сформированный текст HTML во временный файл на диске с расширением .html.
  2. Используйте метод Элементы.ПолеHTML.Перейти(ПутьКФайлу).

Такой подход гарантирует, что движок загрузит файл целиком без искажений и потерь данных.

Альтернативные варианты: Переход на API Яндекс.Карт

Если поддержка Google Maps становится слишком трудозатратной из-за ограничений безопасности или необходимости наличия платного API-ключа, можно рассмотреть использование Яндекс.Карт. Исторически API Яндекс.Карт дольше сохраняло обратную совместимость с компонентами IE, что делало их более стабильными для работы в старых версиях 1С.

Подведем итог: наиболее правильным и современным решением является обновление платформы до актуальных релизов (начиная с 8.3.14). Это полностью снимает вопросы совместимости и позволяет использовать все возможности современного веба внутри интерфейса 1С.

← На главную