javascript - YouTube Iframe API onError 事件在最近几个月没有触发
问题描述
我很确定 YouTube Iframe API“onError”事件会在过去触发,因为我运行了一个基于此 API 的项目。但是最近“onError”事件不会触发,即使是最简单的错误。
这是一个基于官方页面(https://developers.google.com/youtube/iframe_api_reference)的简单示例代码,并且是可行的:
<iframe id="existing-iframe-example"
width="640" height="360"
src="https://www.youtube.com/embed/M7lc1UVf-VE?enablejsapi=1"
frameborder="0"
style="border: solid 4px #37474F"
></iframe>
<script type="text/javascript">
var tag = document.createElement('script');
tag.id = 'iframe-demo';
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('existing-iframe-example', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange,
'onError': onError
}
});
}
function onError(event) {
console.log(event.data)
}
function onPlayerReady(event) {
}
function onPlayerStateChange(event) {
console.log(event.data);
}
</script>
一旦将视频 id 字符串“M7lc1UVf-VE”更改为错误的,例如“M7lc1UVf”,它应该触发“onError”事件,但现在不会。
根据官方页面指南:https ://developers.google.com/youtube/players/support →“谷歌工程师使用youtube-iframe-api标签监控和回答问题”,希望谷歌工程师能看到这个帖子并修复“ onError”问题。
解决方案
我找到了解决方法。我发现,至少在我的情况下,onError
回调不会在初始加载时触发(在最需要的时候!),但会在播放器的其余部分完全加载后触发。
如果您绝对需要该onError
事件起作用,您可以在加载的播放器中重新加载视频。从对象中删除autoplay
参数playerParams
——这会导致 hack 失败。添加loadByVideoId
(用于自动播放)或cueByVideoId
使用相同的视频 ID 到onReady
回调。
这将重新加载当前视频,并在onError
需要时触发回调。否则,几乎没有明显的效果——除了视频在播放前被短暂提示(如果autoplay
预期)。
如果您想了解更多信息,请告诉我——希望对您有所帮助!
编辑:
- 这是一个演示问题的代码框。请注意,在单击“重置”按钮之前,错误不会添加到列表中。(截至 2022 年 2 月 12 日,该错误仍然存在。)
- 这是一个代码框,展示了我找到的解决方法。注意
onReady
回调,以及列表中填充的错误。
推荐阅读
- php - 从数据库 mySQL PHP 生成自动事务 ID
- selenium - 为什么 Selenium 需要打开浏览器,即不能最小化浏览器?
- reactjs - React - 无法重新渲染 jsx 元素列表
- amazon-web-services - 在 terraform 中创建多个 IAM 用户
- elasticsearch - 在管道中使用附件处理器的 Elasticsearch 不会从文件中删除图像
- node.js - Mongoose:如何使用其索引删除数组元素
- jenkins - 根据 jenkins 中提供的输入创建文件
- android - 如何修复 //DynamiteModule: 考虑本地模块 com.google.android.gms.maps_dynamite:0 问题
- python - SQLAlchemyJobstore 在 Flask 应用程序中返回 'TypeError: cannot pickle 'SSLContext' object'
- python - 使用 django 和 openpyxl 写入现有的 excel 文件,无需删除工作簿或创建新工作簿