javascript - YouTube Iframe API onError 事件在最近几个月没有触发

标签 javascript youtube-iframe-api

我很确定 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 的参数对象——这会导致破解失败。添加 loadByVideoId (用于自动播放)或 cueByVideoIdonReady 具有相同的视频 ID打回来。
这将重新加载当前视频和 onError如果需要,回调将触发。否则,几乎没有明显的效果——除了视频在播放前被短暂提示,如果 autoplay是期待。
如果您想了解更多信息,请告诉我——希望对您有所帮助!
编辑:

  • Here is a codesandbox demonstrating the issue.请注意,
    在单击“重置”按钮之前,错误不会添加到列表中。
    (截至 2022 年 2 月 12 日,该错误仍然存​​在。)
  • Here is a codesandbox demonstrating the workaround I found.注意 onReady回调,以及列表中填充的错误。
  • 关于javascript - YouTube Iframe API onError 事件在最近几个月没有触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68250199/

    相关文章:

    javascript - Eclipse 可以在不同的行上格式化逗号分隔的语句 (var a = 1, b=2;) 吗?

    javascript - 包含 JavaScript 代码而不打包为模块

    youtube-iframe-api - 如何更改 youtube 播放器的背景颜色 - youtube-iframe-api

    jquery - youtube.com/iframe_api不会在Windows 10的IE11或Edge中触发

    javascript - 缓慢降低页面加载时的 YouTube 视频音量

    javascript - Uncaught ReferenceError : ytcfg is not defined (also __ytRIL is not defined)

    javascript - 如何启用跨表格单元格和行的 div 拖动和调整大小

    javascript - `Proxy` 将 `this[toString]` 与 `this[Symbol.toStringTag]` 混淆

    javascript - 尝试多次使用超时功能