angular - Youtube Iframe 不刷新就无法工作

标签 angular youtube-iframe-api

重现 Stackblitz 中的问题, 点击 GO 导航到包含 iframe 的组件,它现在可以工作,然后返回和前进, iframe 消失。您必须刷新页面才能再次显示 iframe

我尝试了一些解决方法:

  • 我试图在 ngOnDestroy window['onYouTubeIframeAPIReady'] = null; 中释放对象,但没有成功

这是创建iframe的代码

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

ngOnInit() {
  this.init();
  window['onYouTubeIframeAPIReady'] = (e) => {
            this.YT = window['YT'];

            this.player = new window['YT'].Player('player', {
              videoId: '1cH2cerUpMQ'
            });
  };
}

模板

 <div id="player" >
 </div>

有人有成功的解决方法,请分享。

最佳答案

您可以检查 youtube api 是否已经初始化,然后创建您的播放器:

player: any;

init() {
  if (window['YT']) {
    this.createPlayer();
    return;
  }

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

  window['onYouTubeIframeAPIReady'] = () => this.createPlayer();
}

ngOnInit() {
  this.init();
}

createPlayer() {
  this.player = new window['YT'].Player('player', {
    videoId: '1cH2cerUpMQ'
  });
}

ngOnDestroy() {
  window['onYouTubeIframeAPIReady'] = null;
  if (this.player) {
    this.player.destroy();
  }
}

Forked Stackblitz

关于angular - Youtube Iframe 不刷新就无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340122/

相关文章:

javascript - Angular 中的只读组件不显示换行符

html - AngularJS 风格不适用于新环境

youtube-iframe-api - 以较低质量加载 Youtube iFrame API 视频

javascript - Chrome 更新阻止 Flash 自动播放 - 如何避免它?

youtube-iframe-api - 为什么 YouTube 视频不能在 iOS 10 beta 5 中内联播放?

javascript - 我可以从对象继承函数参数的类型吗?

angular - 同一组件 Angular 的多个独立实例

Angular HttpClient 响应为空,但网络工具显示响应

ios - 无法使用 YTPlayerView 在 iOS 后台播放 youtube 视频

javascript - 要显示的 Youtube 播放器选项