Youtube API - SeekTo有时不起作用

kha*_*eeb 4 javascript youtube youtube-api

我试图让用户使用以下功能在YouTube视频中寻找特定时间:

    function setCurrentTime(slideNum) {
    var object = <?php echo json_encode($matches); ?>;
    if ('seekTo' in player.trackingVideoId){
        var seekTime = object[0][slideNum];
        player.trackingVideoId.seekTo(HHmmssToSeconds(seekTime));
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里

var object = [["00:00:00","00:01:07"],["00","00"],["00","01"],["00","07"]];

player.trackingVideoId = new YT.Player('trackingVideoId');

<iframe id="trackingVideoId" type="text/html" width="340" height="210" src="https://www.youtube.com/embed/D77wXvwChtU?enablejsapi=1" frameborder="0"></iframe>

<input type="button" value="Seek" onclick="setCurrentTime(1)"> 
Run Code Online (Sandbox Code Playgroud)

它有时工作正常,有时它不起作用,并出现以下错误(在firefox consol上):

TypeError: invalid 'in' operand player.trackingVideoId

if ('seekTo' in player.trackingVideoId){
Run Code Online (Sandbox Code Playgroud)

并在评论条件时 if ('seekTo' in player.trackingVideoId){

出现以下错误

Uncaught TypeError: Cannot read property 'seekTo' of undefined 
Run Code Online (Sandbox Code Playgroud)

更新:

我在onYouTubeIframeAPIReady()中初始化了它 - 就像你的链接一样.但是,我把setCurrentTime(slideNum)放在了YouYouTubeIframeAPIReady()函数之外,我试着将它放在里面,还有另一个错误,即setCurrentTime没有定义.

我试图在用户点击按钮时寻找特定时间

<input type="button" value="Seek" onclick="setCurrentTime(0)">
Run Code Online (Sandbox Code Playgroud)

你可以试试@ http://ilstream.com/video_slides/video_slides.php

t_y*_*amo 5

我认为你没有初始化YouTube播放器.
在onYouTubeIframeAPIReady之后,YT.Player可以实例化.
(请在控制台中使用"console.dir(player.trackingVideoId)"进行检查)

我建议您按照相同的方式执行代码.
https://developers.google.com/youtube/iframe_api_reference#Getting_Started

更新:
请尝试此代码,并与您的代码进行比较.
对我来说似乎工作正常(Windows7/Chrome 37.0.2062.124 m).

<!DOCTYPE html>
<html>
  <body>
    <div id="player"></div>
    <input type="button" value="Seek0" onclick="setCurrentTime(0)" />
    <input type="button" value="Seek1" onclick="setCurrentTime(1)" />
    <script>
      var tag = document.createElement('script');
      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '210',
          width: '340',
          videoId: 'D77wXvwChtU',
        });
      }
      function setCurrentTime(slideNum) {
        var object = [ 60, 120 ];
        player.seekTo(object[slideNum]);
      }
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)