В процессе работы с платформой 1С у многих разработчиков возникает необходимость показывать пользователю видеоконтент непосредственно внутри интерфейса системы, например, в элементе формы ПолеHTMLДокумента. Особенно часто эта задача связана с видео из популярных источников, таких как YouTube, Rutube или Google Drive. Однако, как показывает практика, при попытке встраивания видео через iframe или прямой ссылки, мы часто сталкиваемся с проблемой «бесконечной загрузки», когда видео добавляется, но воспроизведение не начинается. Давайте разберем, почему это происходит, и какие существуют варианты решения.
Прежде чем перейти к решениям, рассмотрим основные причины, по которым видео может не воспроизводиться в ПолеHTMLДокумента. Это поможет нам глубже понять природу проблемы и выбрать наиболее подходящий подход:
ПолеHTMLДокумента использует движок Internet Explorer. Старые версии Internet Explorer могут иметь ограниченную поддержку современных веб-стандартов, таких как HTML5 Video API, актуальные версии JavaScript и механизмы CORS (Cross-Origin Resource Sharing), которые критически важны для полноценной работы плееров YouTube или других видеохостингов.iframe или тег video присутствует на странице. Браузер может просто не доверять внешнему источнику или блокировать запросы, нарушающие политику Same-Origin.Пользователь в сообщении 5 подтверждает, что в обычном браузере видео просматривается, а "бесконечная загрузка" висит только при вызове из ПоляHTMLДокумента 1С. Это прямо указывает на проблему совместимости или безопасности внутри платформы 1С, а не на проблемы с самим видеохостингом (как ошибочно предполагалось в сообщении 3).
Один из наиболее надежных способов обеспечить воспроизведение видео в ПолеHTMLДокумента 1С — это разместить видеофайлы на вашем собственном веб-сервере, например, на IIS (Internet Information Services), и затем использовать прямую ссылку на файл видео. Этот подход был предложен в сообщении 2 и является весьма эффективным.
Суть метода: Вместо того чтобы встраивать плеер видеохостинга, мы предоставляем прямую ссылку на сам видеофайл (например, в формате .mp4). Веб-сервер должен быть настроен таким образом, чтобы корректно отдавать эти файлы, поддерживая, например, потоковую передачу (streaming).
Разберем подробнее этот подход:
my_video.mp4) на веб-сервер. Убедитесь, что он доступен по прямому URL, например, http://ваш_сервер/видео/my_video.mp4.<video> HTML5: В ПолеHTMLДокумента 1С мы можем использовать стандартный HTML5 тег <video>, как было предложено в сообщении 6. Этот тег предназначен для встраивания видео напрямую и поддерживается большинством современных (и относительно современных) браузеров.
<!DOCTYPE html>
<html>
<head>
<title>Воспроизведение видео в 1С</title>
</head>
<body>
<h3>Наше видео:</h3>
<video width="640" height="360" controls>
<source src="http://ваш_сервер/путь/к/видео.mp4" type="video/mp4">
Ваш браузер не поддерживает тег video.
</video>
</body>
</html>
Здесь:
width и height определяют размеры плеера.controls добавляет стандартные элементы управления видео (воспроизведение/пауза, громкость, полоса прокрутки).<source> указывает путь к видеофайлу через атрибут src и его тип через type="video/mp4". Мы рекомендуем всегда указывать тип для лучшей совместимости.<video> будет отображен, если браузер пользователя не поддерживает этот тег.Преимущество этого метода в том, что мы обходим сложности с JavaScript-плеерами видеохостингов и используем базовую функциональность HTML5. Если встроенный движок Internet Explorer в 1С поддерживает HTML5 тег <video> (что обычно верно для IE9+), то этот вариант должен работать стабильно. Это минимизирует риски, связанные с ограничениями безопасности и сторонними скриптами.
Если вам требуется большая гибкость, или вы хотите загружать видео из источников, требующих авторизации (например, Google Drive), можно использовать JavaScript для динамической загрузки видео в формате Blob (бинарный большой объект) и последующего его воспроизведения. Этот продвинутый метод также был предложен в сообщении 2.
Суть метода: Мы используем объект XMLHttpRequest для выполнения GET-запроса к видеофайлу. Ответ сервера получаем в виде Blob, который затем конвертируем в Data URL (Base64-представление файла) и присваиваем его атрибуту src тега <video>.
Посмотрим на пример кода, который был предложен, с некоторыми доработками для лучшей демонстрации:
<!DOCTYPE html>
<html>
<head>
<title>Динамическая загрузка видео в 1С</title>
<script type="text/javascript">
function loadVideo() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://ваш_сервер/путь/к/видео.mp4", true); // Используем асинхронный запрос
// Пример авторизации: Если требуется, добавляем заголовок авторизации.
// Например, для Google Drive с OAuth2:
// xhr.setRequestHeader("Authorization", "Bearer ВАШ_ТОКЕН_АВТОРИЗАЦИИ");
xhr.responseType = 'blob'; // Указываем, что ожидаем бинарный ответ
xhr.onload = function(e) {
if (this.status == 200) {
var blob = this.response; // Получаем бинарные данные
// Проверяем, существует ли уже тег video, иначе создаем его
let videoElement = document.getElementById("videoPlayer");
if (!videoElement) {
videoElement = document.createElement("video");
videoElement.setAttribute("id", "videoPlayer");
videoElement.setAttribute("controls", ""); // Добавляем элементы управления
videoElement.setAttribute("width", "640");
videoElement.setAttribute("height", "360");
document.body.appendChild(videoElement); // Добавляем в тело документа
}
var reader = new FileReader();
reader.readAsDataURL(blob); // Конвертирует Blob в base64 и вызывает onload
reader.onloadend = function () { // Используем onloadend для завершения чтения
videoElement.src = reader.result; // Присваиваем Data URL тегу video
}
} else {
console.error("Ошибка загрузки видео: " + this.status);
// Можно отобразить сообщение об ошибке пользователю
}
};
xhr.onerror = function() {
console.error("Сетевая ошибка при загрузке видео.");
};
xhr.send(); // Отправляем запрос
}
</script>
</head>
<body onload="loadVideo()">
<h3>Видео, загруженное с помощью JavaScript:</h3>
<!-- Тег video будет создан динамически, или можно разместить его здесь изначально -->
<!-- <video id="videoPlayer" controls width="640" height="360"></video> -->
</body>
</html>
Проанализируем шаги этого скрипта:
XMLHttpRequest: Создается новый объект для выполнения HTTP-запросов.xhr.open("GET", "...", true) настраивает запрос: GET-метод, URL к видеофайлу, true для асинхронного выполнения.Bearer для Google Drive), мы устанавливаем соответствующий заголовок с помощью xhr.setRequestHeader().Blob: xhr.responseType = 'blob' указывает, что ожидаемый ответ от сервера должен быть в виде бинарного объекта Blob.onload: Этот обработчик срабатывает, когда запрос успешно завершен.
this.status == 200).Blob с помощью this.response.<video>. Это важный момент, так как в изначальном примере предполагается, что тег с id="video" уже существует.FileReader, который умеет читать содержимое Blob.reader.readAsDataURL(blob) читает Blob и кодирует его содержимое в строку Base64, которая затем может быть использована как Data URL.reader.onloadend), мы присваиваем полученный Data URL (reader.result) атрибуту src тега <video>.xhr.send() отправляет настроенный HTTP-запрос.Этот подход позволяет нам получить полный контроль над загрузкой видео и обходить некоторые ограничения безопасности или авторизации, присущие стандартным iframe. Однако, как было отмечено в сообщении 7, для очень больших видеофайлов этот вариант может быть неоптимален, так как он подразумевает загрузку всего файла в память браузера (в виде Blob, затем Data URL), что может привести к замедлениям или проблемам с памятью. Тем не менее, для видео умеренного размера это рабочее решение.
Изначальная проблема автора заключалась в том, что видео с YouTube, встроенное через iframe, "висит на бесконечной загрузке". В сообщении 10 было подтверждено, что аналогичная ситуация наблюдается и с Rutube. Это свидетельствует о том, что проблема не специфична для одного хостинга, а связана с общими ограничениями среды 1С.
Мы выяснили, что даже при использовании iframe, современные плееры видеохостингов требуют определенных возможностей браузера, которые могут отсутствовать или быть заблокированы в ПолеHTMLДокумента 1С. Разберем основные причины и возможные обходные пути:
Исходя из вышеизложенного, воспроизведение видео непосредственно с YouTube или Rutube через iframe в ПолеHTMLДокумента 1С является наименее надежным вариантом. Если вам критически важно показывать видео именно с этих платформ, рассмотрите возможность размещения их на вашем собственном веб-сервере (Вариант 1), либо используйте ссылку на видеохостинг и открывайте его во внешнем браузере.
Посмотрим, какие еще факторы могут влиять на работу видео в ПолеHTMLДокумента и что мы можем предпринять для улучшения ситуации:
Мы рекомендуем убедиться, что используемая версия платформы 1С достаточно актуальна. В более новых версиях могли быть улучшения в работе с HTML-документами и использованы более современные движки для отображения веб-контента. Например, в некоторых режимах работы (веб-клиент) 1С может использовать движок Chromium, который значительно лучше поддерживает современные веб-стандарты, чем Internet Explorer.
Выясните, какой движок браузера используется ПолемHTMLДокумента на вашей платформе. Это можно сделать, попробовав выполнить простейшие HTML5 тесты или JavaScript-функции, которые демонстрируют поддержку тех или иных возможностей. Если это старый Internet Explorer, то ожидать полноценной работы с современными видеохостингами не приходится.
В некоторых старых версиях 1С для работы с мультимедиа могли использоваться элементы управления ActiveX. Однако это устаревший и небезопасный подход. Мы настоятельно рекомендуем избегать его, если только у вас нет строгих требований к поддержке очень старых систем. Современные веб-стандарты, такие как HTML5, предпочтительнее и более безопасны.
Стоит также проверить, нет ли специфических настроек в вашей конфигурации 1С, которые могут влиять на работу ПолеHTMLДокумента. Например, некоторые конфигурации могут иметь свои внутренние механизмы по блокировке или фильтрации внешнего контента.
Как упоминалось в сообщении 7, когда в src передаются двоичные данные, видео может работать. Это подтверждает, что если видеофайл "вручную" загружен в 1С (например, в качестве двоичных данных или прикрепленного файла) и затем эти данные передаются в ПолеHTMLДокумента, то воспроизведение возможно. Однако для больших видео это неэффективно и может быстро привести к переполнению памяти или проблемам с производительностью.
Именно поэтому вариант с веб-сервером (Вариант 1) является более предпочтительным, так как он позволяет избежать передачи больших двоичных данных через 1С, используя потоковую передачу непосредственно из веб-сервера в браузерный движок ПолеHTMLДокумента.
Мы рассмотрели различные подходы к воспроизведению видео в ПолеHTMLДокумента 1С. Изначальная проблема с "бесконечной загрузкой" видео с YouTube или Rutube чаще всего связана с ограничениями встроенного браузера 1С (обычно старый Internet Explorer) и строгими политиками безопасности. Универсального и надежного решения для прямого встраивания видео с внешних хостингов, к сожалению, нет из-за этих фундаментальных ограничений.
Однако, мы можем успешно воспроизводить видео, если:
<video>. Это наиболее надежный и рекомендуемый вариант для большинства сценариев.Всегда рекомендуем тестировать выбранный подход на вашей конкретной версии платформы 1С и клиентской машине, так как поведение ПолеHTMLДокумента может варьироваться.