Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Youtube JSAPI,示例不起作用_Javascript_Api_Youtube - Fatal编程技术网

Javascript Youtube JSAPI,示例不起作用

Javascript Youtube JSAPI,示例不起作用,javascript,api,youtube,Javascript,Api,Youtube,我正试图捕获YT对象。调用了onYouTubePlayerReady()函数,但我似乎无法对该对象执行任何操作 <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("swfobject", "2.2"); </script> <script type

我正试图捕获YT对象。调用了onYouTubePlayerReady()函数,但我似乎无法对该对象执行任何操作

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

加载(“swfobject”,“2.2”);
函数onYouTubePlayerReady(playerID)
{
ytplayer=document.getElementById(playerID);
}
函数播放()
{
如果(玩家)
{
ytplayer.playVideo();
}
}
play();
ytplayer引用的是DOM,而不是视频本身(play),它抛出了未捕获的TypeError:Object没有方法“playVideo”,但这基本上是google给出的示例


我做错了什么?

在上面的代码中,我根本看不出你在哪里初始化视频播放器。下面的代码在Firefox中运行良好。用你想播放的视频的视频ID替换[你的视频ID]您也可以确认下面的代码在IE和Chrome中的工作方式与champ类似

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

var params={allowScriptAccess:“始终”};
var atts={id:'myytplayer'};
swfobject.embeddeswf(“http://www.youtube.com/v/[YOUR_VIDEO_ID]?enablejsapi=1&playerapiid=ytplayer&version=3;“ytaplayer”、“640”、“360”、“8”、null、null、params、atts);
函数onYouTubePlayerReady(playerId){
ytplayer=document.getElementById(“myytplayer”);
ytplayer.addEventListener('onStateChange','onytplayerStateChange');
}
函数onytplayerStateChange(newState){
警报(“玩家的新状态:+newState”);
}
函数播放(){
如果(玩家){
ytplayer.playVideo();
}
}
我认为您缺少的是,您需要通过传递到对象初始化属性(var atts=…)行的任何内容引用“playerId”。进行一点测试确实会发现“onYouTubePlayerReady”函数没有实际传递可用于执行DOM查找的有效id值。

页面加载后,您正在调用
play();

但加载youtube播放器需要一些时间,因此函数
onYouTubePlayerReady
在一段时间后被调用

由于您在
onYouTubePlayerReady
中定义了
ytplayer
,因此在调用onYouTubePlayerReady之前不能使用
ytplayer
。此外,ytplayer应该是全局的,以便两个函数都可以使用它