Javascript “不能开火”;loadVideoByUrl(';…';)";Youtube的';s Iframe API–;未定义

Javascript “不能开火”;loadVideoByUrl(';…';)";Youtube的';s Iframe API–;未定义,javascript,youtube-iframe-api,Javascript,Youtube Iframe Api,似乎我在这里遗漏了一些明显的东西,但我找不到 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 pla

似乎我在这里遗漏了一些明显的东西,但我找不到

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('player1');
    // here everything is fine and I can see the 
    // function as part of player
    console.log(player);
    // but here it says "player.loadVideoByUrl()" undefined
    player.loadVideoByUrl("https://youtu.be/bHQqvYy5KYo");
    player.playVideo();
}
工作。有什么想法吗


提前谢谢

我假设调用
loadVideoByUrl
函数时,
player
未初始化。在文档中,他们使用

events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
运动员的比赛项目。播放器对象似乎是异步构造的。因此,如果使用这些事件,代码将如下所示:

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('player1', {
      events: {
        'onReady': onPlayerReady
      }
    });
}

function onPlayerReady(){
     player.loadVideoByUrl("https://youtu.be/bHQqvYy5KYo");
     player.playVideo();
}

请问,为什么不在页面中添加iframe_api作为静态脚本?这是Youtube提供的方式吗?这是Youtube官方文档的一部分:直到现在才进一步考虑。我明白了,这与我们的情况无关,我在下面补充了一个答案。