Не удается управлять встраиванием Youtube даже с помощью document.getElementById('xyz').playVideo() - не функция?
-
19-09-2019 - |
Вопрос
Хорошо, я застрял, и я не знаю, что не так, даже после просмотра документов Google и прочтения предложений здесь, в Stackoverflow.Почему я не могу контролировать встраивания Youtube в мою веб-страницу?
Если я создам HTML-файл с <body> являющийся:
<object id="o1" width="480" height="295">
<param name="movie"
value="http://www.youtube.com/v/qCTLCNmnlKU&hl=en_US&fs=1&enablejsapi=1&">
</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed id="e1"
src="http://www.youtube.com/v/qCTLCNmnlKU&hl=en_US&fs=1&enablejsapi=1&"
type="application/x-shockwave-flash"
allowscriptaccess="always" allowfullscreen="true" width="480" height="295">
</embed>
</object>
Даже когда я пытаюсь сделать:
// I get an object. Yay.
document.getElementById('e1');
// This generates "...playVideo is not a function"
document.getElementById('e1').playVideo();
Помогите!Что я делаю не так?Спасибо.
Решение
Хорошо, итак, вот ответ, найденный в одной крошечной строке текста на странице API: http://code.google.com/apis/youtube/js_api_reference.html
"Примечание:Чтобы протестировать любой из этих вызовов, ваш файл должен быть запущен на веб-сервере, поскольку Flash Player ограничивает вызовы между локальными файлами и интернет".
Итак, чтобы позволить мне продолжать разработку на моем ноутбуке Mac, я сделал следующее:
Отредактировал мой /etc/хосты файл для включения записи обратно на мой локальный хостинг:
127.0.0.1 testhost.com
Отредактировал мой /etc/apache2/httpd.conf файл для добавления записи виртуального хоста, указывающей обратно на мой каталог разработки:
<VirtualHost *:80> ServerName testhost.com DocumentRoot /Users/amy/flashproj <Directory /Users/amy/flashproj> AllowOverride all Options MultiViews Indexes FollowSymLinks Allow from All </Directory> </VirtualHost>
Перезапущенный Apache:
sudo apachectl restart
Возвращен на мой собственный локальный хостинг через мой новый виртуальный сервер:
http://testhost.com
Вуаля.Сейчас это полностью работает.Я могу запросить страницу для плеера:
document.getElementById('e1'); // OK
document.getElementById('e1').playVideo(); // OK!
Фью!НЕТ onYouTubePlayerReady() На YouTube уже есть() требуется либо то, либо другое!
Другие советы
Youtube Player еще не был загружен на момент, когда вы пытаетесь его использовать.Существует специальная функция обратного вызова, которая будет запущена автоматически, как только она будет загружена.
Ваши HTML-страницы, на которых отображается проигрыватель без хрома, должны реализовывать функцию обратного вызова с именем onYouTubePlayerReady.API будет вызывать эту функцию, когда проигрыватель будет полностью загружен и API будет готов к приему вызовов.
Автор: Ссылка на API YouTube JavaScript Player.
Поэтому вы можете переписать свой код следующим образом:
<script type="text/javascript">
function onYouTubePlayerReady(playerId) {
var ytplayer = document.getElementById('e1');
ytplayer.playVideo();
}
</script>
Вы также можете возражать против прохождения playerapiid
при встраивании проигрывателя, если их много, чтобы различать в onYouTubePlayerReady
обработчик.
Что произойдет, если вы используете идентификатор "o1" вместо "e1"?
Хорошо, что ж, на этой странице: http://code.google.com/apis/youtube/js_api_reference.html мне кажется, что библиотека "swfobject" должна быть включена для того, чтобы этот API был доступен.Я попробую это.
[редактировать] Хорошо, вот что у меня есть:
<html>
<head>
<script src='http://code.jquery.com/jquery-1.4.1.js'></script>
<script src='http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'></script>
<script>
window['onYouTubePlayerReady'] = function onYouTubePlayerReady(playerId) {
player = document.getElementById("zebra");
player.playVideo();
};
$(function() {
swfobject.embedSWF(
"http://www.youtube.com/v/qCTLCNmnlKU?hl=en_US&fs=1&enablejsapi=1&playerapiid=ytplayer",
"foo",
"480", "295",
"8",
null, null,
{ allowScriptAccess: 'always' },
{ id: 'zebra' }
);
});
</script>
</head>
<body>
<div id='foo'>Foo</div>
</body>
</html>
Это работает, но, как ни странно, работает только тогда, когда я обслуживаю его с реального веб-сервера.Если я помещу это в локальный файл и загружу его в браузер, это не сработает.Я не знаю почему, но тогда я абсолютно не эксперт по Flash или YouTube.
Видишь http://gutfullofbeer.net/youtube.html (то же, что введено выше)
Я застрял с этой проблемой на два дня..каждая проблема, связанная с переменной youtube Player, была связана с ее локальным запуском.После подделки адреса через Windows / hosts он работает отлично.