Javascript 函数中的Youtube api不工作
胡闹,试图在特定页面上加载YouTube视频,只在桌面上加载,并传入一个视频ID。所以我必须将它投入到功能中。但由于我无法理解的原因,我的尝试失败了,已经尝试了3天:)当您删除函数Javascript 函数中的Youtube api不工作,javascript,Javascript,胡闹,试图在特定页面上加载YouTube视频,只在桌面上加载,并传入一个视频ID。所以我必须将它投入到功能中。但由于我无法理解的原因,我的尝试失败了,已经尝试了3天:)当您删除函数inyectYT(ytid)和videoId:ytid并将其替换为下面的注释代码时,我的脚本可以工作 当然,这和往常一样简单,请看一看,谢谢 console.clear(); 函数inyectYT(ytid){ var script=document.createElement(“脚本”); script.src=”
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);
}
然而,在代码中,这并不是您想要做的,也不是您工作时所要做的。(至少在我测试它的时候。我不知道是否存在需要在那里设置这些处理程序的情况)