2012-04-03 57 views
0

我想捕獲YT對象。 onYouTubePlayerReady()函數被調用,但我似乎無法對該對象進行任何操作。Youtube JSAPI,例子不工作

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    google.load("swfobject", "2.2"); 
</script> 
<script type="text/javascript"> 
    function onYouTubePlayerReady (playerID) 
    { 
     ytplayer = document.getElementById(playerID); 
    } 

    function play() 
    { 
     if (ytplayer) 
     { 
      ytplayer.playVideo(); 
     } 
    } 
    play(); 
</script> 

YouTube播放器被引用到DOM,而不是視頻本身(打爲此拋出遺漏的類型錯誤:對象#有沒有一種方法「的playVideo」,但是這基本上是由谷歌給出的例子

我在做什麼錯了?

回答

0

我在上面的代碼中看不到你在什麼地方初始化你的視頻播放器,下面的代碼在Firefox中工作正常,用你想要的視頻代替視頻ID請在下方播放[YOUR_VIDEO_ID],並且您應該全部設置好。也可以確認下面的代碼就像IE和Chrome中的冠軍一樣工作。

<div id="video" class="overlay"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> 
    <div id="ytapiplayer"></div> 
    <script type="text/javascript"> 
    var params = { allowScriptAccess: "always" }; 
    var atts = { id: 'myytplayer' }; 
    swfobject.embedSWF("http://www.youtube.com/v/[YOUR_VIDEO_ID]?enablejsapi=1&playerapiid=ytplayer&version=3", "ytapiplayer", "640", "360", "8", null, null, params, atts); 

    function onYouTubePlayerReady(playerId) { 
     ytplayer = document.getElementById("myytplayer"); 

     ytplayer.addEventListener('onStateChange','onytplayerStateChange'); 
    } 

    function onytplayerStateChange(newState) { 
     alert("Player's new state: "+newState); 
    } 

    function play() { 
     if (ytplayer) { 
     ytplayer.playVideo(); 
     } 
    } 
    </script> 
    <a href="javascript:void(0)" onclick="play()">Play</a> 
</div> 

我想你錯過的是,你需要引用「playerId」通過任何你傳遞到對象的初始化屬性(VAR的ATT = ...)線。做一點測試確實顯示「onYouTubePlayerReady」函數並沒有實際傳遞一個可用於執行DOM查找的有效id值。

1

只要頁面加載,即打電話給play();

但是,加載youtube播放器需要一些時間,因此在一段時間後函數onYouTubePlayerReady會被調用。

因爲您在onYouTubePlayerReady中定義了ytplayer,所以在調用onYouTubePlayerReady之前不能使用ytplayer。此外,ytplayer應該是全球化的,這樣兩個功能都可以使用它。