Переход платформы 1С:Предприятие на современный движок отображения HTML (WebKit, а в более поздних версиях — Chromium) стал важным шагом для отказа от устаревшего Internet Explorer. Однако это нововведение принесло ряд технических сложностей. Программисты столкнулись с тем, что привычные инструменты, такие как Яндекс.Карты или библиотеки для редактирования изображений (например, Cropper.js), перестали корректно обрабатывать события мыши, в частности — функцию перетаскивания (Drag-and-Drop). Рассмотрим подробно, почему это происходит и как вернуть работоспособность вашим обработкам.
В старых версиях платформы (до 8.3.14) 1С использовала движок IE. В нем взаимодействие между контейнером 1С и JavaScript происходило по специфическим протоколам Microsoft. При переходе на WebKit изменилась модель обработки событий. Основная проблема заключается в том, что контейнер 1С в некоторых версиях некорректно транслирует события mousedown, mousemove и mouseup внутрь HTML-документа. В результате скрипт карты "не понимает", что пользователь пытается захватить объект и переместить его.
Проанализируем ситуацию: если в версии 8.3.12 все работало, а в 8.3.15 перетаскивание пропало при неизменном коде JS — проблема в реализации взаимодействия платформы и движка. Рассмотрим шаги по устранению этой неисправности.
Как показывает практика и сообщения коллег, многие ошибки взаимодействия с WebKit были оперативно исправлены разработчиками «1С» в последующих релизах. Если вы столкнулись с проблемой на релизах ветки 8.3.15, первым делом рекомендуется выполнить обновление.
Согласно тестам, стабильная работа перетаскивания в Яндекс.Картах возобновляется на платформе версии 8.3.16.1063 и выше. Однако для обеспечения максимальной совместимости с современными стандартами JS и CSS, мы рекомендуем переходить на ветку 8.3.18 или 8.3.20, где движок Chromium был значительно доработан в части производительности и безопасности.
Если обновление платформы не решило проблему или вы используете сложные библиотеки типа Cropper.js, которые "разваливаются" в новом движке, нам необходимо увидеть реальные ошибки выполнения скриптов. В отличие от IE, WebKit позволяет использовать полноценную консоль отладки.
Разберем, как включить отладку HTML-полей в 1С:
"C:\Program Files\1cv8\common\1cestart.exe" /RemoteDebuggingPort=9222
localhost:9222.Теперь мы можем видеть консоль (Console), дерево DOM и сетевые запросы. Проанализируем вкладку "Console": часто там можно обнаружить ошибки Content Security Policy или блокировку загрузки локальных ресурсов. Это даст точный ответ, почему библиотека работает некорректно.
Иногда проблема кроется в том, что WebKit интерпретирует жесты мыши как попытку панорамирования всей страницы, а не элемента карты. Чтобы принудительно передать управление скрипту Яндекс.Карт, попробуем внести изменения в CSS контейнера, в котором инициализируется карта.
Рассмотрим применение свойства touch-action. Добавьте в стиль контейнера карты следующий код:
#map-container {
width: 100%;
height: 100%;
touch-action: none;
}
Свойство touch-action: none; запрещает браузеру обрабатывать жесты (скролл, зум) самостоятельно, что позволяет API Яндекс.Карт перехватывать их. Также убедимся, что при инициализации карты в коде 1С явно включены нужные поведения (behaviors):
myMap.behaviors.enable('drag');
myMap.behaviors.enable('scrollZoom');
myMap.behaviors.enable('dblClickZoom');
Библиотеки вроде Cropper.js часто перестают работать в 1С на WebKit из-за того, что они пытаются загрузить изображение по пути file://. Движки на базе Chromium по умолчанию блокируют такие запросы в целях безопасности (Cross-Origin Resource Sharing).
Выясним, как это обойти. Вместо передачи пути к файлу, попробуем передавать изображение в виде строки Base64. Это гарантирует, что движок воспримет данные как часть документа и не будет блокировать их по соображениям безопасности.
Пример подготовки данных в 1С:
ДвоичныеДанныеКартинки = Новый ДвоичныеДанные(ПутьКФайлу);
СтрокаBase64 = Base64Строка(ДвоичныеДанныеКартинки);
// Передаем эту строку в HTML-макет
В JS-коде используем полученную строку:
var image = document.getElementById('image');
image.src = 'data:image/png;base64,' + base64StringFrom1C;
Проанализируем структуру вашего HTML-документа. При переходе на WebKit крайне важно убрать устаревшие инструкции, которые предназначались для IE. Проверьте наличие тега X-UA-Compatible:
Удалите из заголовка head следующую строку, если она там есть:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Этот тег может заставлять 1С пытаться эмулировать старое поведение, что вносит конфликты в работу нового движка WebKit. Современный движок автоматически использует актуальные стандарты рендеринга.
Подведем итог: если вы столкнулись с "замерзанием" Яндекс.Карт в 1С, наиболее эффективным решением будет комплексный подход — обновление платформы до версии 8.3.18+ и проверка JS-кода через Remote Debugging Port для устранения конфликтов обработки событий.