2010-02-04 15 views
5

Estoy controlando un reproductor incrustado de YouTube sin bordes con javascript, y quiero ocultarlo ocasionalmente configurando la pantalla: ninguno. Sin embargo, cuando vuelvo a mostrar al jugador, pierde sus métodos de youtube.El reproductor de youtube oculto pierde sus métodos

Por ejemplo:

<script> 
    swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=player", 
    "player", "425", "356", "8", null, null, 
    {allowScriptAccess: "always"}, {id: 'player'} 
); 

    var player = null; 

    function onYouTubePlayerReady(playerId) { 
    player = document.getElementById(playerId); 
    player.addEventListener('onStateChange', 'playerStateChanged'); 
    } 

    function hidePlayer() { 
    player.pauseVideo(); 
    player.style.display = 'none'; 
    } 
    function showPlayer() { 
    player.style.display = 'block'; 
    player.playVideo(); 
    } 
</script> 
<a href="#" onClick="hidePlayer();">hide</a> 
<a href="#" onClick="showPlayer();">show</a> 
<div id="player"></div> 

Calling hidePlayer seguido por showPlayer da este error en la llamada playVideo:

Uncaught TypeError: Object #<an HTMLObjectElement> has no method 'playVideo' 

La única solución que puedo encontrar es el uso de la visibilidad: oculto, pero que es jugando con el diseño de mi página. ¿Alguna otra solución por ahí?

Respuesta

0

Me ha sucedido esto también en mi userscript. Puede intentar simplemente hacerlo de 1x1 px, en lugar de ocultarlo por completo.

Es un problema bastante molesto, y no tiene sentido en cuanto a por qué sucede esto.

0

Ambos muestran: ninguno y visibilidad: oculto volverá a cargar el reproductor, pero puede resolverlo mediante CSS envolviendo el reproductor de video en un div con desbordamiento: oculto.

HTML:

<div id="ytwrapper"> 
    <div id="ytplayer"> 
    </div> 
</div> 

CSS:

#ytwrapper { overflow: hidden; } 

JS:

function hidePlayer() { 
    player.pauseVideo(); 
    player.style.marginLeft = "50000px"; 
} 

function showPlayer() { 
    player.style.marginLeft = "0px"; 
    player.playVideo(); 
} 
Cuestiones relacionadas