2012-09-16 45 views
0

的,它不工作 即時得到錯誤,因爲o.loadVideoById不是一個函數。爲什麼 ? 我做錯了什麼?loadByvideoId不低於小提琴功能

我使用的代碼如下(同小提琴)

<html> 
<body> 
<script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js">    </script> 

<a name="ytplayer"></a> 
<div id="ytplayer_div1">You need Flash player 8+ and JavaScript 
    enabled to view this video.</div> 
<div id="ytplayer_div2"></div> 
<script type="text/javascript" 
    src="http://ajax.googleapis.com/ajax/libs/swfobject/2/swfobject.js"></script> 
<script type="text/javascript"> 

    var ytplayer_playlist = []; 
    var ytplayer_playitem = 0; 

    function ytplayer_render_player() { 
     if (/\d+/.test(window.location.hash)) { 
      ytplayer_playitem = parseInt(/\d+/.exec(window.location.hash)) - 1; 
     } 
     swfobject.embedSWF('http://www.youtube.com/v/' 
       + ytplayer_playlist[ytplayer_playitem] 
       + '&enablejsapi=1&rel=0&fs=1' 
       + (/\d+/.test(window.location.hash) ? '&autoplay=1' : ''), 
       'ytplayer_div1', '425', '344', '8', null, null, { 
        allowScriptAccess : 'always', 
        allowFullScreen : 'true' 
       }, { 
        id : 'ytplayer_object' 
       }); 
    } 

    function ytplayer_render_playlist() { 
     for (var i = 0; i < ytplayer_playlist.length; i++) { 
      var img = document.createElement("img"); 
      img.src = "http://img.youtube.com/vi/" + ytplayer_playlist[i] 
        + "/default.jpg"; 
      var a = document.createElement("a"); 
      a.href = "#ytplayer"; 
      // 
      // Thanks to some nice people who answered this question: 
      // http://stackoverflow.com/questions/1552941/variables-in-anonymous-functions-can-someone-explain-the-following 
      // 
      a.onclick = (

      function(j) { 
       return function() { 
        ytplayer_playitem = j; 
        ytplayer_playlazy(1000); 
       }; 
      })(i); 
      a.appendChild(img); 
      document.getElementById("ytplayer_div2").appendChild(a); 
     } 
    } 

    function ytplayer_playlazy(delay) { 
     // 
     // Thanks to the anonymous person posted this tip: 
     // http://www.tipstrs.com/tip/1084/Static-variables-in-Javascript 
     // 
     if (typeof ytplayer_playlazy.timeoutid != 'undefined') { 
      window.clearTimeout(ytplayer_playlazy.timeoutid); 
     } 
     ytplayer_playlazy.timeoutid = window.setTimeout(ytplayer_play, 
       delay); 
    } 

    function ytplayer_play() { 
     var o = document.getElementById('ytplayer_object'); 
     if (o) { 
      o.loadVideoById(ytplayer_playlist[ytplayer_playitem]); 
     } 
    } 


    function onYouTubePlayerReady(playerid) { 
     var o = document.getElementById('ytplayer_object'); 
     if (o) { 
    o.addEventListener("onStateChange",  "ytplayer_statechange"); 
      o.addEventListener("onError", "ytplayer_error"); 
     } 
    } 
    // 
    //State Change Handler 
    //* Sets up the video index variable 
    //* Calls the lazy play function 
    // 

    function ytplayer_statechange(state) { 
     if (state == 0) { 
      ytplayer_playitem += 1; 
      ytplayer_playitem %= ytplayer_playlist.length; 
      ytplayer_playlazy(5000); 
     } 
    } 
    // 
    //Error Handler 
    //* Sets up the video index variable 
    //* Calls the lazy play function 
    // 

    function ytplayer_error(error) { 
     if (error) { 
      ytplayer_playitem += 1; 
      ytplayer_playitem %= ytplayer_playlist.length; 
      ytplayer_playlazy(5000); 
     } 
    } 
    // 
    //Add items to the playlist one-by-one 
    // 
    ytplayer_playlist.push('tGvHNNOLnCk'); 
    ytplayer_playlist.push('_-8IufkbuD0'); 
    ytplayer_playlist.push('wvsboPUjrGc'); 
    ytplayer_playlist.push('8To-6VIJZRE'); 
    ytplayer_playlist.push('8pdkEJ0nFBg'); 
    // 
    //These lines have been moved to the bottom 
    // 
    ytplayer_render_player(); 
    ytplayer_render_playlist(); 
</script> 

</body> 

</html> 

回答

1

首先它是loadVideoById代替loadByvideoId。但我認爲這是一個錯字。

在這裏有同樣的問題,但與我自己的代碼。問題是,當iframe由於某種原因不可見時,iframe不會加載內容,並且對象不會被API擴展(loadVideoById不存在的原因)。此外,window.onPlayerReady函數不可見時不會被調用。這也可能是你的情況。確保iframe在頁面上真正可見。

「特技」我使用是使用一些CSS加載的IFRAME在可見區和它被加載後我改變類名所以它將被放置在正確的位置/位置:

CSS:

#player {position:relative; width:200px; height:200px; ....... } 
#player.loading {position:fixed; top:0; left:0; width:1px;height:1px; overflow:hidden; } 
在window.onPlayerReady回調我從對象中刪除 '加載' 類

,例如(使用jQuery):

$j('#player').removeClass('loading').prop({width:'',height:''}).css({width:'',height:''}); 

另外我刪除了API添加到對象的寬度和高度,以便能夠設置它的寬度CSS。

注意:我已經創建了寬度和高度爲1px的YT.Player類。

就是這樣。