为什么YouTube iframe播放器在加载时调用onYouTubePlayerReady?

Sup*_*tar 4 javascript youtube-api youtube-javascript-api

我想加载YouTube视频,然后立即静音,播放,暂停和取消静音.在这样做时,我希望向用户呈现一个没有大播放按钮的视频,并且底部有控件.为此,我有以下代码:

<script type="text/javascript">
function onYouTubePlayerReady(playerid)
{
    mutePlayPauseUnmute(playerid);
}
function onYouTubePlayerAPIReady(playerid)
{
    mutePlayPauseUnmute(playerid);
}
function onYouTubeIframeAPIReady(playerid)
{
    mutePlayPauseUnmute(playerid)
}
function onPlayerReady(playerid)
{
    mutePlayPauseUnmute(playerid)
}

function mutePlayPauseUnmute(playerid)
{
    var player = document.getElementById(playerid);
    player.mute();
    player.playVideo();
    player.pauseVideo();
    player.unMute();
}
</script>
<iframe id="quotedVideo1" type="text/html" width="246" height="160" src="https://www.youtube.com/embed/NWHfY_lvKIQ?modestbranding=1&rel=0&showinfo=0&autohide=1&iv_load_policy=3&theme=light&enablejsapi=1&playerapiid=quotedVideo1" frameborder="0"> <!-- Magic Comment --> </iframe>
Run Code Online (Sandbox Code Playgroud)

然而,经检查,没有onYouTubePlayerReady,onYouTubePlayerAPIReady,onYouTubeIframeAPIReady,onPlayerReady,也不mutePlayPauseUnmute是以往任何时候都调用.我做错了什么?根据https://developers.google.com/youtube/js_api_reference#onYouTubePlayerReady,它看起来应该有效,但事实并非如此.

Nir*_*kku 11

你在这里混淆了两个不同的播放器API.

你想使用iframe播放器吗?如果是这样,您需要查看:https://developers.google.com/youtube/iframe_api_reference.

onYouTubePlayerReady您需要定义以下方法onYouTubeIframeAPIReady,而不是定义:创建播放器,然后分配onPlayerReady回调.

确保您包含iframe播放器API的JavaScript,以便onYouTubeIframeAPIReady进行调用:

var tag = document.createElement('script');
tag.src = o.protocol + "://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,因为您正在编写iframe而不是使用JavaScript来为您执行此操作:

如果您确实编写了标记,那么在构造YT.Player对象时,您不需要指定宽度和高度的值,这些值被指定为标记的属性,或者指定的videoId和player参数.在src URL中.

另外,在你的mutePlayPauseUnmute函数..

playerid.mute();
playerid.playVideo();
playerid.pauseVideo();
playerid.unMute();
Run Code Online (Sandbox Code Playgroud)

您将要触发实际的方法,而player不是playerid如上所述.

  • 是的,这是完全公平的,只是传递参考,因此,如果您想了解我的工作方式,可以深入研究代码.. :) (2认同)