使用YouTube iFrame API创建的视频播放器停止使用Chrome v.85 [英] Video player created with Youtube Iframe API stopped working with Chrome v.85

查看:15
本文介绍了使用YouTube iFrame API创建的视频播放器停止使用Chrome v.85的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在将YouTube iframe API与最新稳定版本的Chrome(版本85)配合使用时遇到问题。我知道一个月前一切正常,但现在,即使完全按照YouTube iframe API文档中最基本的例子操作:

https://developers.google.com/youtube/iframe_api_reference#Getting_Started

不再起作用。OnReady和onStateChange事件未被触发,并且";Player";对象缺少其大部分功能,例如,player.playVideo()未定义。该问题不会出现在我测试它的任何其他浏览器上,它也只有在我在测试时登录到我的YouTube帐户时才会发生。

我怀疑问题的起因是随YouTube请求一起发送的Cookie,因为我在控制台的问题发现选项卡中收到此错误:

&q;指示是否通过指定其SameSite属性在跨站点请求中发送Cookie

,而Chrome在版本85中提到了这一点:

拒绝不安全的SameSite=NONE Cookie;

如果我从YouTube注销,播放器将正常工作,因为YouTube使用这些Cookie根据您的个人资料推荐不同的视频。

我目前正在寻找一种解决办法,我唯一能找到的是,如果我手动创建iFrame,而不是使用API,我可以将&youtube-nocookie";而不是&youtube";放在iFrame的src中,但这样我就没有对象可以引用来控制播放器,例如,如果我必须创建一个自定义按钮来暂停/播放视频。我猜主要是在YouTube上修复他们的API,但现在有什么方法可以解决这个问题吗?

这里有一个代码来说明这个问题,代码摘自上面链接的YouTube iframe API文档:

https://codepen.io/Gabielovv/pen/VwadJvg?editors=1111

  // 2. This code loads the IFrame Player API code asynchronously.
  var tag = document.createElement('script');

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

  // 3. This function creates an <iframe> (and YouTube player)
  //    after the API code downloads.
  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '390',
      width: '640',
      videoId: 'M7lc1UVf-VE',
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

  // 4. The API will call this function when the video player is ready.
  function onPlayerReady(event) {
    console.log("onPlayerReady");
    event.target.playVideo();
  }

  // 5. The API calls this function when the player's state changes.
  //    The function indicates that when playing a video (state=1),
  //    the player should play for six seconds and then stop.
  var done = false;

  function onPlayerStateChange(event) {
    console.log("onPlayerStateChange");
    if (event.data == YT.PlayerState.PLAYING && !done) {
      setTimeout(stopVideo, 6000);
      done = true;
    }
  }

  function stopVideo() {
    player.stopVideo();
  }

  function playYtVideo() {
    console.log("playYtVideo");
    player.playVideo();
  }

推荐答案

从此Google Issue Tracker找到解决方案。似乎是浏览器问题。

试试这些:

希望对🙃有所帮助

这篇关于使用YouTube iFrame API创建的视频播放器停止使用Chrome v.85的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆