Вопрос пользователя заключается в интеграции видео с YouTube в приложение на Delphi с использованием компонента WebBrowser1 и автоматического воспроизведения этого видео. Приведенный код на Delphi вызывает ошибку EOleException, 80020101 при попытке выполнения JavaScript, который использует устаревший API YouTube.
Решение проблемы
Для начала, необходимо использовать актуальный API YouTube – Iframe API, который является рекомендуемым для интеграции видео на веб-страницах. В примере ниже показан рабочий код для встраивания и автоматического воспроизведения видео YouTube в компонент WebBrowser1.
HTML код
<!DOCTYPE html>
<html>
<head>
<!-- // это необходимо для принудительного запуска встроенного браузера в режиме EDGE -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<!-- 1. Элемент <iframe> (и плеер видео) заменит этот <div> тег. -->
<div id="player"></div>
<script>
// 2. Этот код загружает код IFrame Player API асинхронно.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. Эта функция создает <iframe> (и плеер YouTube)
// после того, как код API загрузится.
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'M7lc1UVf-VE', // Замените на ID нужного видео
playerVars: { 'autoplay': 1, 'controls': 0 }, // Это необходимо для автоматического воспроизведения
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. API вызовет эту функцию, когда плеер видео будет готов.
function onPlayerReady(event) {
event.target.playVideo();
}
// 5. API вызовет эту функцию, когда состояние плеера изменится.
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
setTimeout(stopVideo, 6000);
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
</script>
</body>
</html>
Delphi код
unit u_frm_main;
interface
uses
MsHtml, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate(ExtractFilePath(ParamStr(0)) + 'test.html');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Если необходимо, можно добавить здесь код для запуска JavaScript,
// но при использовании правильного HTML кода, как показано выше,
// дополнительный код на стороне Delphi не требуется.
end;
end.
Объяснение
При использовании корректного HTML кода, который включает в себя Iframe API YouTube, нет необходимости в выполнении дополнительного JavaScript кода с помощью Delphi. Как только страница загружена, API YouTube автоматически инициализирует плеер и воспроизведет видео, если переменная autoplay установлена в значение 1.
Важно отметить, что использование устаревшего JavaScript API YouTube приведет к ошибкам, поэтому необходимо обновить код в соответствии с актуальными рекомендациями Google.
Вопрос пользователя связан с технической проблемой: необходимо встроить и автоматически воспроизвести видео с YouTube в приложение на Delphi с использованием компонента `WebBrowser1`, и для этого необходимо использовать актуальный Iframe API YouTube, так
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.