Javascript 函数中的Youtube api不工作

Javascript 函数中的Youtube api不工作,javascript,Javascript,胡闹,试图在特定页面上加载YouTube视频,只在桌面上加载,并传入一个视频ID。所以我必须将它投入到功能中。但由于我无法理解的原因,我的尝试失败了,已经尝试了3天:)当您删除函数inyectYT(ytid)和videoId:ytid并将其替换为下面的注释代码时,我的脚本可以工作 当然,这和往常一样简单,请看一看,谢谢 console.clear(); 函数inyectYT(ytid){ var script=document.createElement(“脚本”); script.src=”

胡闹,试图在特定页面上加载YouTube视频,只在桌面上加载,并传入一个视频ID。所以我必须将它投入到功能中。但由于我无法理解的原因,我的尝试失败了,已经尝试了3天:)当您删除函数
inyectYT(ytid)
videoId:ytid
并将其替换为下面的注释代码时,我的脚本可以工作

当然,这和往常一样简单,请看一看,谢谢

console.clear();
函数inyectYT(ytid){
var script=document.createElement(“脚本”);
script.src=”https://www.youtube.com/iframe_api";
var done=false;
script.onload=script.onreadystatechange=function(){
如果(
!完成&&
(!this.readyState)||
this.readyState==“已加载”||
this.readyState==“完成”)
) {
完成=正确;
script.onload=script.onreadystatechange=ytPlayerInit(ytid);
}
};
document.getElementsByTagName(“head”)[0].appendChild(脚本);
}
函数ytPlayerInit(ytid){
控制台日志(ytid);
变量播放选项={
//如果要在任何地方自动播放,必须激活自动播放+静音(值=1)
//Chrome/Safari/Mobile
自动播放:1,
静音:1,
自动隐藏:1,
第一,,
rel:0,
showinfo:0,
控件:0,
禁用KB:1,
enablejsapi:1,
iv_负载_策略:3,
循环:1
};
//3.此函数创建(和YouTube播放器)
//API代码下载后。
球员;
函数onYouTubeIframeAPIReady(ytid){
ytPlayer=新的YT.Player(“Player”{
宽度:“1280”,
高度:“720”,
videoId:ytid,
//videoId:“M7lc1UVf VE”,
playerVars:播放选项,
活动:{
onReady:onPlayerReady
//“onStateChange”:onPlayerStateChange
}
});
}
函数onPlayerReady(事件){
event.target.playVideo();
}
}
//dom就绪
document.onreadystatechange=函数(){
如果(
document.readyState==“交互式”&&
document.querySelector(“.container”).classList.contains(“home”)
) {
inyectYT(“M7lc1UVf VE”);
}
};
iframe{
位置:绝对位置;
排名:0;
左:0;
宽度:100%;
身高:100%;
指针事件:无;
}

这一行有两个问题:

function onYouTubeIframeAPIReady(ytid) {
window.onYouTubeIframeAPIReady = function () {
首先,在另一个函数中声明一个函数只会使它在该外部函数中可访问。您从YouTube加载的代码将无法找到它。通过将其附加到
窗口
对象,可以使其成为全局的

第二,调用此函数时,它不会收到
ytid
参数。您要做的是使用接收到的
yteplayerinit
ytid
。您只需从
onyoutubeiframeapiredy
中删除参数即可(因为JS函数是闭包)

这就给了我们这样一条线:

function onYouTubeIframeAPIReady(ytid) {
window.onYouTubeIframeAPIReady = function () {

我还要指出一点

script.onload = script.onreadystatechange = ytPlayerInit(ytid);
相当于

ytPlayerInit(ytid);
script.onload = script.onreadystatechange = undefined;
ytPlayerInit
不返回值。)代码看起来像是您的意思

script.onload = script.onreadystatechange = function () {
  ytPlayerInit(ytid);
}
然而,在代码中,这并不是您想要做的,也不是您工作时所要做的。(至少在我测试它的时候。我不知道是否存在需要在那里设置这些处理程序的情况)