嵌入 youtube html5 播放器显示没有全屏按钮

Posted

技术标签:

【中文标题】嵌入 youtube html5 播放器显示没有全屏按钮【英文标题】:embed youtube html5 player shows no fullscreen button 【发布时间】:2013-05-11 23:13:03 【问题描述】:

我在我的 php 文件中包含以下 YouTube 播放器,但播放器未显示全屏按钮。切换到 Flash 播放器有效(无论是通过将 url 从 /embed 更改为 /v 还是禁用 &html5=1)。我做错了什么?

这里有一个例子:http://jonnyrimkus.square7.ch/stuff/youtube_html5_fullscreen.php

<script>

var tag = document.createElement(\'script\');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName(\'script\')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);


function onYouTubeIframeAPIReady() 
  player = new YT.Player(\'player\', 
    playerVars: 
      \'allowfullscreen\': \'true\',                
      \'allowscriptaccess\': \'always\'
    ,
    events: 
      \'onReady\': onYouTubePlayerReady,
      \'onStateChange\': playerStateChange,
      \'onError\': playerStateError
    
  );

</script>   
<iframe id="player"   border="0" frameborder="0" src="http://www.youtube.com/embed/36XdO9Iv9ew?enablejsapi=1&playerapiid=lastfmplayer&autoplay=1&html5=1&fs=1&origin=http://jonnyrimkus.square7.ch"></iframe>

【问题讨论】:

示例链接已更新:rimkus.it/stuff/youtube_html5_fullscreen.php 【参考方案1】:

如果 Youtube 播放器位于另一个没有 allowfullscreen 属性的 iframe 中,全屏按钮也将不可见。

与 Google 的 documentation 所说的不同(截至 2014 年 11 月),查询字符串中的 fs 属性似乎不会影响全屏的可见性。可见性似乎受到iframe 中的allowfullscreen 属性的影响,youtube 播放器在实例化过程中默认放置该属性。也就是说,如果您将播放器嵌入到另一个 iframe 中,您还应该将该 iframe 标记为 allowfullscreen(或其所有变体 webkitallowfullscreen mozallowfullscreen

<iframe src='' frameborder='0' webkitallowfullscreen mozallowfullscreen allowfullscreen>
       <!-- YT player-->
</iframe>

【讨论】:

【参考方案2】:

您现在使用 iframe api 的方式什么也不做,该 api 被绑定在一个空元素上,例如&lt;div id="player"&gt;&lt;/div&gt;,id 是new YT.Player 函数中的第一个参数。

要使用 iframe api 加载 youtube 视频,您需要在正文中添加以下内容:

<div id="player"></div>

<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);


function onYouTubeIframeAPIReady() 
    player = new YT.Player('player', 
        height: 480,
        width: 640,
        videoId: "36XdO9Iv9ew",
    );

</script>

使用 iframe api 时无需明确指定您要启用全屏。

你也可以只使用 iframe 而不使用 api,你需要在使用时指定你想要全屏。

<iframe   frameborder="0" id="player" allowfullscreen="1" title="YouTube video player" src="http://www.youtube.com/embed/36XdO9Iv9ew?enablejsapi=1"></iframe>

只使用 iframe 标签会快一点,但如果你想使用 iframe api 的额外功能,你别无选择。

带有示例的页面(另请查看来源):http://qnet.co/yt

您也可以自己实现全屏功能(Youtube 不需要,但仍然很酷):

var goFullscreen = function(id) 
  var el = document.getElementById(id);
  if (el.requestFullScreen) 
    el.requestFullScreen();
   else if (el.mozRequestFullScreen) 
    el.mozRequestFullScreen();
   else if (el.webkitRequestFullScreen) 
    el.webkitRequestFullScreen();
  


var leaveFullscreen = function() 
  if (document.cancelFullScreen) 
    document.cancelFullScreen();
   else if (document.mozCancelFullScreen) 
    document.mozCancelFullScreen();
   else if (document.webkitCancelFullScreen) 
    document.webkitCancelFullScreen();
  

让 Youtube 播放器全屏显示:goFullscreen('player'),离开全屏显示:leaveFullscreen()

requestFullscreen和cancelFullscreen的不同版本是针对不同浏览器的,因为标准还没有完全完善

有关 Javascript 全屏的更多信息:http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/(相对旧文档,但仍然有效)

题外话:用php回显这样的字符串是没有用的,你可以将它粘贴到文件的正文中php标签之外。

【讨论】:

您好,感谢您的详细帮助,它有效。此外,此代码位于 iframe 内,要在其中拥有全屏按钮,我必须将 allowfullscreen="1" 添加为 iframe 的属性。 (非标准 html)但不知道为什么....另外在上面的例子中,您必须在 youtube 上激活 html5 测试。是否可以强制html5播放器? 据我所知,无法强制使用 html5,因此它仍处于试用阶段。如果你手头有太多时间,你可能会成功,但我认为这不值得。【参考方案3】:

这在 2014 年 7 月仍然是一个问题,您只是想知道 Google 是否会解决此问题。实际上,您可以通过使用 UA Spoofer 在客户端以另一种方式强制 Flash 播放器,例如对于 Google Chrome 浏览器,Chrome Web Store - djflhoibgkdhkhhcedjiklpkjnoahfmg 然后欺骗不理解 HTML5 的浏览器。

实际上 HTML5 视频仍然是一场灾难,视频的颗粒状尖峰锯齿边缘和人字形图案虽然微弱,但仍然让人分心。而 Flash 平滑、完美、可靠且边缘锐利,图案伪影为零。

HTML5 - 仍然大拇指向下,我不会把它强加给用户。

哦,是的,但全屏仍然不会出现在这样的嵌入中 Rick Astley - Never Gonna Give You Up @ viewpure embed http://viewpure.com/dQw4w9WgXcQ

您可以使用上面的示例来玩弄不同的浏览器插件。

【讨论】:

以上是关于嵌入 youtube html5 播放器显示没有全屏按钮的主要内容,如果未能解决你的问题,请参考以下文章

强制 iOS iPhone youtube 嵌入播放器退出全屏

YouTube iframe 播放器 - 在 iOS 上触发全屏

在没有全屏的情况下在 UIWebView 中播放 Youtube 视频

Youtube 自动播放无法在具有嵌入式 HTML5 播放器的移动设备上运行

强制 YouTube 播放列表为 HTML5 播放

嵌入的 YouTube 视频无法在 iPad (iOS 7) 上播放,而 HTML5 搜索输入可见