【问题标题】:Why isn't the YouTube iframe player calling onYouTubePlayerReady when it's loaded?为什么 YouTube iframe 播放器在加载时不调用 onYouTubePlayerReady?
【发布时间】:2013-02-06 20:32:33
【问题描述】:

我想加载一个 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>

但是,经过检查,onYouTubePlayerReadyonYouTubePlayerAPIReadyonYouTubeIframeAPIReadyonPlayerReadymutePlayPauseUnmute 都没有被调用。 我做错了什么?根据https://developers.google.com/youtube/js_api_reference#onYouTubePlayerReady,它看起来应该可以工作,但它没有。

【问题讨论】:

  • 值得注意的是:“玩家必须至少 200 像素乘 200 像素。”
  • 我知道...客户要求它正好是这个尺寸:/

标签: javascript youtube-api youtube-javascript-api


【解决方案1】:

您在这里混淆了两种不同的播放器 API。

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

您需要定义以下方法,而不是定义 onYouTubePlayerReadyonYouTubeIframeAPIReady,创建您的播放器,然后分配一个 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);

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

如果你确实写了标签,那么当你构造 YT.Player 对象,您无需指定宽度值和 高度,它们被指定为标签的属性,或者 videoId 和 player 参数,在 src URL 中指定。

另外,在你的 mutePlayPauseUnmute 函数中..

playerid.mute();
playerid.playVideo();
playerid.pauseVideo();
playerid.unMute();

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

【讨论】:

  • 你为什么引用文档中关于在标签中放置宽度和高度的部分?我这样做了...
  • 当您询问 iframe 播放器时,您仍在引用 JS API。他们是不同的!即使您编写了 iframe 标签,您实际上也必须导入 JS 并随后创建 YT.Player 对象....查看上面的链接,搜索“加载视频播放器”。 API 的 JavaScript 代码加载后,API 会调用 onYouTubeIframeAPIReady 函数
  • 另外,我要把这个扔掉:我创建一个插件来避免所有这些问题 -- github.com/nirvanatikku/jQuery-TubePlayer-Plugin
  • 谢谢,但我的上级不希望网站上有更多插件 XD 如果插件没问题,我们会使用 JWPlayer 而不是 YouTube:P
  • 是的,这很公平,只是传递参考,如果你想看看我是怎么做的,你可以深入研究代码.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2013-09-19
  • 2018-01-18
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多