【问题标题】:Not able to play youtube video embedded in iframe created via JS无法播放嵌入在通过 JS 创建的 iframe 中的 youtube 视频
【发布时间】:2020-06-03 16:27:35
【问题描述】:

​您好, 当我将 youtube 视频嵌入到 iframe 中时,该视频不是通过 HTML 标记制作而是使用 JavaScript (document.createElement()) 创建的,视频无法播放,并且只显示错误消息“视频不可用”。

附加信息:

  • 第一个 iframe 没有 src 属性。
  • iframe 的文档是以编程方式创建的。第二 (视频嵌入)iframe 是第一个 iframe 文档的一部分。
  • 此页面在 localhost 上运行。
  • 这种行为也发生在在自己的域上运行的在线应用程序上。
  • 并非所有视频都会出现这种行为,我注意到它主要发生在音乐视频中。
  • 所有视频都已启用嵌入,因此这不是无法播放这些视频的原因。

gif showing behavior here

index.html:

<html>
<div>
<iframe id="myFrame" style="width: 600px ; height: 350px" src="iframeVideo.html" frameborder="1"
allowfullscreen=""></iframe>
</div>
<div id="video"></div>

<script>
var container = document.getElementById("video");
var frame = document.createElement("iframe");
frame.style.width = "600px";
frame.style.height = "400px";

frame.onload = function () {
if (frame.contentDocument) {
var fdoc = frame.contentDocument;
var vframe = fdoc.createElement("iframe");

vframe.src = "https://www.youtube.com/embed/NEIwl93Yr8o";
vframe.setAttribute("frameborder", "0");
vframe.setAttribute("allowfullscreen", "");
vframe.style.width = "500px";
vframe.style.height = "281px";

fdoc.body.appendChild(vframe);
}
}
container.appendChild(frame);
</script>

</html>

iframeVideo.html:

<html>
<iframe id="myFrame" style="width: 500px ; height: 281px" src="https://www.youtube.com/embed/NEIwl93Yr8o" frameborder="0"
allowfullscreen=""></iframe>
</html>

【问题讨论】:

  • 查看浏览器控制台(F12)是否有错误或警告。
  • 只有这个警告:youtube.com 处的跨站点资源关联的cookie 被设置为没有SameSite 属性。未来版本的 Chrome 将仅通过设置为 SameSite=NoneSecure 的跨站点请求传递 cookie。您可以在 Application>Storage>Cookies 下的开发者工具中查看 cookie,并在 chromestatus.com/feature/5088147346030592chromestatus.com/feature/5633521622188032 上查看更多详细信息
  • 还要检查“网络”选项卡并查看请求的响应 - 密切注意 iframe 的响应。 可能您可能需要在 iframe 中添加一个附加参数; IIRC,iframe 中视频的 URL 为:https://www.youtube.com/embed/NEIwl93Yr8o?origin=http:yourwebsite.com
  • 我已经尝试过使用 youtube 提供的参数,我也在研究请求,但我没有找到任何有用的信息来表明问题所在或可以解决的问题。 (也许我看错了什么)
  • 其他选项可能是:在issue tracker 上发布您的问题 - 它可能有一些关于音乐视频的限制或document.createElement = 您需要以这种方式创建 DOM 元素吗? - 尝试使用页面上已有的 DOM/html 控件。也许是 iframe 内部变量的初始化...

标签: javascript video iframe youtube-api


【解决方案1】:

示例代码中的视频已被上传到 YouTube 的人设置为不可嵌入。您可以通过在 YouTube (https://www.youtube.com/watch?v=NEIwl93Yr8o) 上成功观看视频来看到这一点,但不能直接访问 https://www.youtube.com/embed/NEIwl93Yr8o(注意“播放”按钮在单击时显示“视频不可用”)。例如,您可以将其与 https://www.youtube.com/embed/Np1zODg5cqc 进行比较,这是一个您可以通过单击播放按钮成功观看的嵌入 URL。

某些 YouTube 视频无法嵌入,除非您可以控制相应的 YouTube 帐户,否则您无能为力(除非要求所有者使其可嵌入)。

【讨论】:

  • 我之前已经尝试过使用自己上传到 youtube 的视频,我在其中启用了嵌入但它不起作用。所以我认为这不是某些视频无法播放的原因。
  • Here you can see, this video has embedding enabled(当你点击分享->嵌入视频时)
  • @RadekM。请尝试转到youtube.com/watch?v=NEIwl93Yr8o 并右键单击,复制嵌入代码,将其粘贴到最简单的网页中,然后尝试播放。它不播放。单击“播放”时显示“视频不可用”。也许对你来说不一样;我不知道你在哪里——也许是地理问题。我在美国西海岸。
  • 视频在本地主机上通过 xampp Apache @avocadatoria 运行的简单静态 HTML 页面上为我工作,我在欧洲
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2012-02-08
  • 2018-05-26
  • 1970-01-01
  • 2011-09-06
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多