首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复页面上多个播放器的角元素中的“TypeError: youTubeIframeAPIReady不是函数”

如何修复页面上多个播放器的角元素中的“TypeError: youTubeIframeAPIReady不是函数”
EN

Stack Overflow用户
提问于 2019-07-10 04:12:13
回答 1查看 1K关注 0票数 0

我的index.html页面上有几个自定义的角元素,名为<my-video>,每个元素都通过YouTube Iframe加载视频播放器。我为onYouTubeIframeAPIReady回调定义了一个回调,该回调是在加载了API脚本时在window对象上触发的。回调设置视频播放器。为了设置多个播放器,我在回调的内部手动调用窗口‘’onYouTubeIframeAPIReady‘(它自己调用自己)。结果是:每个球员的负载都很好,功能也和预期的一样。在最后一个播放器创建后,我得到一个错误:"Uncaught : youTubeIframeAPIReady不是一个函数“。对于我的生活,我不知道如何解决控制台TypeError。请帮帮忙。

这是组件库中的视频组件,使用的是角自定义元素,而不是完整的应用程序。

Index.html

代码语言:javascript
运行
复制
<my-video some-property="some value"></my-video>
<my-video some-property="some value"></my-video>

Video.component.ts

代码语言:javascript
运行
复制
import { Component, OnInit} from '@angular/core';
import { Observable } from 'rxjs';

@Component({
  selector: 'my-video',
  templateUrl: './video.component.html',
  styleUrls: ['./video.component.scss']
})
export class VideoComponent implements OnInit {
  videoYoutubeId = 'WWXfdIK1WxA';
  private player: any;
  private YT: any;

  constructor() {}

  ngOnInit() {
    this.loadYoutubeScript();
    this.createVideoPlayer();
  }

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

  createVideoPlayer() {
    const youTubeIframeAPIReady = window['onYouTubeIframeAPIReady'];

    window['onYouTubeIframeAPIReady'] = () => {

      this.YT = window['YT'];
      const iframeId = this.videoYoutubeId.toLowerCase();
      this.player = new window['YT'].Player(iframeId, {
        events: {
          'onReady': this.onPlayerReady.bind(this)
        }
      });

      youTubeIframeAPIReady(); // <==== Uncaught TypeError: youTubeIframeAPIReady is not a function
    };
  }

}

Video.component.html

代码语言:javascript
运行
复制
<iframe
   [id]="videoYoutubeId | lowercase"
   width="640"
   height="360"
   style="width: 100%; height: 100%; padding: 0; margin: 0;"
   frameborder="0"
   src="https://www.youtube.com/embed/WWXfdIK1WxA?controls=1&rel=0&showinfo=0&autoplay=0&modestbranding=1&enablejsapi=1&html5=1&fs=0">
</iframe>

我希望能够加载几个视频元素到我的索引页面和每一个视频有自己的播放器,然后我可以检索信息或控制通过类型记录。我需要一种方法来消除错误:"Uncaught : youTubeIframeAPIReady不是一个函数“,在最后一个播放器创建之后。

EN

回答 1

Stack Overflow用户

发布于 2019-07-10 05:28:19

从匿名函数调用另一个方法的最佳方法是使用箭头函数来触发以下方法:

设readyFuction = () => this.youTubeIframeAPIReady();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56963304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档