YouTube API - 不会触发'onYouTubePlayerReady()'

Ash*_*ams 16 javascript swfobject youtube-api

根据我的阅读,我应该如何设置YouTube API:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta content='text/html;charset=UTF-8' http-equiv='content-type' />
    <title>Youtube Player</title>
    <script src="jquery.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script>
    <script type="text/javascript" charset="utf-8">
      function onYouTubePlayerReady(id) {
        console.log("onYouTubePlayerReady() Fired!");
        var player = $("#youtube_player").get(0);
      }

      var params = { allowScriptAccess: "always" };
      var atts = { id: "youtube_player" };
      swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1", 
                         "youtube", "425", "356", "8", null, null, params, atts);

    </script>
  </head>
  <body>
    <div id="youtube"></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,'onYouTubePlayerReady()'根本不会触发,如果我手动获取对播放器的引用,则很多方法都是未定义的; 例如,cueVideoById()可以工作,但playVideo()不能.

我该如何解决这个问题?

Pek*_*ica 29

您需要使用测试脚本在Web服务器上,如文档中所述:

注意:要测试任何这些调用,您必须在Web服务器上运行文件,因为Flash播放器限制本地文件和Internet之间的调用.


小智 5

这个功能:

function onYouTubePlayerReady(playerid) {
  console.log('readyIn');
};
Run Code Online (Sandbox Code Playgroud)

不必直接在单独的脚本标记中.

只有你必须遵守的规则是:不要将此函数放在domready事件中 - 必须尽快定义它.

例如在mootools我使用它像这样:

function onYouTubePlayerReady(playerid) {
  echo('readyIn');
};

document.addEvent('domready', function() { 
   ...
});
Run Code Online (Sandbox Code Playgroud)