youtube iframe api loadVideoById()错误

youtube iframe api loadVideoById()错误,iframe,youtube-api,Iframe,Youtube Api,我正在将youtube视频添加到一家公司的网站,并希望它们在非flash设备上显示。我一直在玩youtube iframe API,并更新了其中一个示例,允许用户单击链接以更改iframe中的视频。编辑的代码为: <!DOCTYPE HTML> <html> <body> <div id="player"></div> <script> var tag = document.createElement('script');

我正在将youtube视频添加到一家公司的网站,并希望它们在非flash设备上显示。我一直在玩youtube iframe API,并更新了其中一个示例,允许用户单击链接以更改iframe中的视频。编辑的代码为:

<!DOCTYPE HTML>
<html>
<body>
<div id="player"></div>
<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 done = false;
var player;
function onYouTubePlayerAPIReady() {
    player = new YT.Player('player', {
      height: '390',
      width: '640',
      videoId: 'JW5meKfy3fY',
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
}
function onPlayerReady(evt) {
    evt.target.playVideo();
}
function onPlayerStateChange(evt) {
    if (evt.data == YT.PlayerState.PLAYING && !done) {
        setTimeout(stopVideo, 6000);
        done = true;
    }
}
function stopVideo() {
    player.stopVideo();
}

function loadVideo(videoID) {
  if(player) { player.loadVideoById(videoID); }
}

</script>

<a href="javascript:loadVideo('kGIjetX6TBk');">Click me to change video</a>

</body>
</html>
这在Safari、Chrome和Firefox中运行良好,但在IE7、8或9中不起作用。在IE7和IE8中,它返回一个错误“对象不支持此属性或方法”


这是API的问题还是我做错了什么?

我也有类似的问题,结果是只要没有调用
onPlayerReady
,就不应该调用YT.Player对象(包括
loadVideoById
)上的任何方法


如果(player){…}不够,则执行检查
,将创建
player
对象,并且一些属性在没有可用方法的情况下已经可用。

您需要从onPlayerReady事件调用加载视频函数

例如,如果您希望在单击缩略图时加载视频,请执行此操作(这需要jquery,但它应该能够理解这一点):

函数onPlayerReady(evt){
evt.target.playVideo();
//声明所需的点击平衡功能
$('#拇指a)。单击(函数(){
//从中获取数据视频id attr
var myvideo=$(this.attr('data-video-id');
//调用自定义函数
loadVideo(myvideo);
//防止单击传播
返回false;
});
}

通过这种方式,您可以确保播放机已加载。

在调用
播放机后,使用
返回false
防止单击传播。我的单击事件处理程序中的loadVideoById
为我解决了这个问题。

解决了这个问题<代码>。。。事件:{'onReady':function(){…}
嘿,我也遇到了同样的问题。我确信在调用loadVideo()之前已经调用了onPlayerReady。但我不是在onPlayerReady函数中调用loadVideo。我是在onPlayerStateChange函数中调用它。会出现什么问题?
function loadVideo(videoID) {
  if(player) { player.loadVideoById(videoID); }
}
function onPlayerReady(evt) {

  evt.target.playVideo();

  //declare the click even function you want
  $('#thumbs a).click(function(){

    //get a data-video-id attr from the <a data-video-id="XXXXXX">
    var myvideo = $(this).attr('data-video-id');

    //call your custom function
    loadVideo(myvideo);

    //prevent click propagation 
    return false;
  });
}