YouTube iFrame API .seekTo()不是一种方法?

时间:2012-03-21 22:26:00

标签: php javascript youtube youtube-api

我知道.seekTo()适用于Javascript API,但我无法使用 iFrame API。这种方法是否受支持?下面的代码成功嵌入了视频,并成功地将console.log -s作为播放器对象。我在控制台中收到错误“player.seekTo is not a function”。

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

有什么想法吗?谢谢!

4 个答案:

答案 0 :(得分:6)

此处使用新的iframe API工作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,您可以在特定时间开始播放视频。 使用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函数类型设置一个警告框。如果这显示未定义的&#39;你有问题。

答案 1 :(得分:3)

符合预期:http://jsfiddle.net/JbwY4/(FF 11,Chrome 17)。

确保满足以下条件:

  1. 定义了标识为player的容器:<div id="player"></div>
  2. 代码不延期。即,不在onload事件中,$(document).readysetTimeout等。否则,IFrame API无法加载,代码将无效。
  3. jQuery已加载。

答案 2 :(得分:1)

seekTo()方法仅在onReady事件后才可用。

以下是一个以100秒开始播放的示例:

http://jsfiddle.net/9RQK3/

答案 3 :(得分:0)

我相信并非所有的javascript方法都已经在iframe api上作为其实验而得到了肯定,所以我猜你不会尝试它并且它失败了。但是我没有详细使用iframe api。