2012-03-21 43 views
8

我知道.seekTo()在JavaScript API中起作用,但我無法使用iFrame API工作。此方法是否受支持?下面的代碼成功嵌入視頻,併成功將console.log-s作爲播放器對象。在控制檯中出現錯誤「player.seekTo不是一個函數」。YouTube iFrame API .seekTo()不是一種方法嗎?

<script> 
     var tag = document.createElement('script'); 
     tag.src = "http://www.youtube.com/player_api"; 
     var firstScriptTag = document.getElementsByTagName('script')[0]; 
     firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
     var player; 
     function onYouTubePlayerAPIReady() { 
      player = new YT.Player('player', { 
       height: '390', 
       width: '640', 
       videoId: 'u1zgFlCw8Aw' 
      }); 
     } 
     $(window).load(function(){ 
      jQuery('#test').click(function(){ 
       //console.log('test'); 
       console.log(player); 
       player.seekTo(25); 
       return false; 
      }); 
     }); 
    </script> 
    <a href="#" id="test">Test</a> 

任何想法?謝謝!

回答

0

我相信並非所有的JavaScript方法都已經在iframe api上實現了,因爲它的實驗性,所以我猜如果你嘗試了它,它就會失敗。但是我沒有詳細使用iframe api。

2

這按預期工作:http://jsfiddle.net/JbwY4/(FF 11,Chrome 17)。

確保滿足以下條件:

  1. 容器與ID player定義:<div id="player"></div>。代碼是不推遲。即,不在onload事件中,$(document).ready,setTimeout等中。否則,IFrame API無法加載,代碼將無法工作。
  2. jQuery已加載。
+0

你是說當你點擊#test鏈接時,視頻按照預期尋找(因爲你的代碼段不適合我)?我沒有任何問題嵌入視頻,我無法使seekTo()函數工作。 – 2012-03-22 23:30:59

+0

我在FF和Safari上試過了,它工作正常。由於某些原因,當我點擊#test鏈接時,OSX上的Chrome瀏覽器無法執行任何操作。控制檯給了我相同的「player.seekTo不是函數」錯誤。 – 2012-03-22 23:52:23

+0

@thechrisvoth我經歷了創建OSX VM(OS X Lion)的麻煩,安裝了Chrome 18.0.1025.142。雖然視頻播放不好(Mac/Flash/Chrome bug?),但'player.seekTo'方法**不起作用。 – 2012-04-01 16:37:56

1

seekTo()方法僅在onReady事件後可用。

這裏是開始播放的數百個例子:使用新的iframe的API,FYI工作

http://jsfiddle.net/9RQK3/

+1

你的例子不尋求我... – 2012-03-22 23:37:08

+0

你使用什麼瀏覽器?我在FF和Chrome中測試過它,它工作正常。 – stewe 2012-03-22 23:40:22

+0

我在FF和Safari中試過了,它工作正常。由於某些原因,OSX上的Chrome並未尋求。 – 2012-03-22 23:53:13

6

這裏的an updated jsfiddle:如果你僅僅使用一個iframe純HTML嵌入你可以把?start=30的開始時間

<iframe width="640" height="390" 
     src="//www.youtube.com/embed/p2H5YVfZVFw?start=30" 
     frameborder="0" allowfullscreen></iframe> 

對於API就可以開始在certa視頻像這樣的時間。 使用start參數

function onYouTubePlayerAPIReady() { 
    player = new YT.Player('player', { 
     height: '390', 
     width: '640', 
     videoId: 'p2H5YVfZVFw', 
     playerVars: { 'start': 159, 'autoplay': 1, 'controls': 1 }, 
     events: { 
     'onReady': onPlayerReady, 
     'onStateChange': onPlayerStateChange, 
     } 

    }); 

只能調用seekTo玩家已經開始播放,或者什麼都不做了。檢查playerStateChange回調:

onStateChange': onPlayerStateChange 

添加這個回調函數

function onPlayerStateChange(evt) 
{  
    if (evt.data==1) 
    { 
     // this will seek to a certain point when video starts 
     // but you're better off using 'start' parameter 
     // player.seekTo(22); 
    } 
} 

jsFiddle在底部按鈕尋求30,60,90秒。它已經通過與「羅馬」押韻的所有瀏覽器進行過測試。當它打開時,它會爲player.seekTo函數類型提供一個警告框。如果顯示'未定義',說明您有問題。