代码之家  ›  专栏  ›  技术社区  ›  zaius

隐藏的YouTube播放器失去了它的方法

  •  5
  • zaius  · 技术社区  · 15 年前

    我正在用javascript控制一个嵌入的YouTube无铬播放器,我想通过设置display:none来隐藏它。但是,当我再次显示该播放器时,它会丢失它的YouTube方法。

    例如:

    <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>
    

    调用hideplayer,然后调用showplayer,在播放视频调用时会出现此错误:

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

    我唯一能找到的解决方案是使用可见性:隐藏,但这会影响我的页面布局。还有其他的解决办法吗?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Avindra Goolcharan    15 年前

    我在用户脚本中也遇到过这种情况。你可以试着做1x1像素,而不是完全隐藏它。

    这是一个非常恼人的问题,而且对于为什么会发生这种情况没有任何意义。

        2
  •  0
  •   Will    12 年前

    display:none和visibility:hidden都将重新加载播放器,但是您可以通过css将视频播放器包装在一个带有overflow:hidden的分区中来解决这个问题。

    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();
    }