YouTube Iframe API 最近几个月没有触发 onError 事件
YouTube Iframe API onError event does not fire in recent months
我很确定 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→“Google工程师使用youtube-iframe-api标签监控和回答问题”,希望Google工程师可以看到这个 post 并修复“onError”问题。
您需要从服务器(非本地)加载页面。改成不本地加载就好了。
我遇到了同样的问题,并意识到如果我在本地加载页面,大多数错误事件都不会引发。如果我从我的 azure 服务器加载页面,错误是正确的。
此外,如果 html 在本地加载,有些视频根本不会 work/load。
我找到了解决方法。我发现,至少在我的情况下,onError
回调不会在初始加载时触发(当最需要它时!),但会在其他播放器完全加载后触发。
如果您绝对需要 onError
事件起作用,您可以在加载的播放器中重新加载视频。从 playerParams
对象中删除 autoplay
参数——这会导致破解失败。在 onReady
回调中添加 loadByVideoId
(用于自动播放)或具有相同视频 ID 的 cueByVideoId
。
这将重新加载当前视频,并且 onError
回调将在需要时触发。否则,将几乎没有明显的效果 - 除了视频在播放前被短暂提示(如果 autoplay
是预期的。
如果您需要更多信息,请告诉我 - 希望对您有所帮助!
编辑:
- Here is a codesandbox demonstrating the issue. 注意
在单击“重置”按钮之前,错误不会添加到列表中。
(截至 2022 年 2 月 12 日,该错误仍然存在。)
- Here is a codesandbox demonstrating the workaround I found. 注意
onReady
回调,以及列表中出现的错误。
我很确定 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→“Google工程师使用youtube-iframe-api标签监控和回答问题”,希望Google工程师可以看到这个 post 并修复“onError”问题。
您需要从服务器(非本地)加载页面。改成不本地加载就好了。
我遇到了同样的问题,并意识到如果我在本地加载页面,大多数错误事件都不会引发。如果我从我的 azure 服务器加载页面,错误是正确的。 此外,如果 html 在本地加载,有些视频根本不会 work/load。
我找到了解决方法。我发现,至少在我的情况下,onError
回调不会在初始加载时触发(当最需要它时!),但会在其他播放器完全加载后触发。
如果您绝对需要 onError
事件起作用,您可以在加载的播放器中重新加载视频。从 playerParams
对象中删除 autoplay
参数——这会导致破解失败。在 onReady
回调中添加 loadByVideoId
(用于自动播放)或具有相同视频 ID 的 cueByVideoId
。
这将重新加载当前视频,并且 onError
回调将在需要时触发。否则,将几乎没有明显的效果 - 除了视频在播放前被短暂提示(如果 autoplay
是预期的。
如果您需要更多信息,请告诉我 - 希望对您有所帮助!
编辑:
- Here is a codesandbox demonstrating the issue. 注意 在单击“重置”按钮之前,错误不会添加到列表中。 (截至 2022 年 2 月 12 日,该错误仍然存在。)
- Here is a codesandbox demonstrating the workaround I found. 注意
onReady
回调,以及列表中出现的错误。