YouTube player iframe API: playVideo не работает в Firefox 9.0.1
у меня есть код встраивания YouTube (я буду вставлять только код, который вызывает проблемы для меня и вырезать вещи, которые не являются публичными):
console.log(ytplayer);
ytplayer.playVideo();
4 ответов
у меня была очень похожая проблема, и я боролся с ответом. Мои звонки в playVideo (), похоже, не работали.
оригинал:
$('#play_movie').click(function(){
$('#video').show();
if(player)
{
if(typeof player.playVideo == 'function')
{
player.playVideo();
}
}
проблема заключалась в том, что игрок еще не был доступен - если я просто дал ему немного времени, чтобы появиться, то вызов работал
$('#play_movie').click(function(){
$('#video').show();
if(player)
{
var fn = function(){ player.playVideo(); }
setTimeout(fn, 1000);
}
Не знаю, если это ваша точная проблема, но я надеюсь, что это поможет кому-то
более надежный способ сделать это-проверить, готов ли игрок. Если игрок не готов, очередь игрока.playVideo () и выполните его, когда он будет готов, используя событие onReady. суть
var playerConfig = {}, // Define the player config here
queue = { // To queue a function and invoke when player is ready
content: null,
push: function(fn) {
this.content = fn;
},
pop: function() {
this.content.call();
this.content = null;
}
},
player;
window.onYouTubeIframeAPIReady = function() {
player = new YT.Player('player', {
videoId: 'player',
playerVars: playerConfig,
events: {
onReady: onPlayerReady
}
});
};
// API event: when the player is ready, call the function in the queue
function onPlayerReady() {
if (queue.content) queue.pop();
}
// Helper function to check if the player is ready
function isPlayerReady(player) {
return player && typeof player.playVideo === 'function';
}
// Instead of calling player.playVideo() directly,
// using this function to play the video.
// If the player is not ready, queue player.playVideo() and invoke it when the player is ready
function playVideo(player) {
isPlayerReady(player) ? player.playVideo() : queue.push(function() {
player.playVideo();
});
}
я наткнулся на этот пост ища что-то похожее. Я нашел ответ здесь, по relic180:
В принципе, Chrome может инициализировать YouTube, даже если divs скрыты (т. е. display:none
), но FF и IE не могут. Мое решение было вариантом relic180:
перенести игрока left:200%
или что угодно, когда я хочу, чтобы он был невидимым, но получал инициализировано (и доступно для других вызовов player
), а затем переместить его обратно на экран, когда мне это нужно.
Я лично нашел на предустановленных IFrames, что API не будет работать должным образом, если вы не будете использовать https://www.youtube.com как домен. Поэтому будьте осторожны, чтобы не пропустить "www". В противном случае API создаст объект player, но не сможет выполнить методы.