【问题标题】:Youtube iframe api Uncaught TypeError: object is not a function?Youtube iframe api Uncaught TypeError:对象不是函数?
【发布时间】:2014-09-07 07:45:51
【问题描述】:

所以我正在加载一个 youtube 播放列表:

event.target.loadPlaylist(videoIds);

我收到了这个错误:

奇怪的是播放列表加载正常大约一秒钟, 然后中断给我那个错误。

对不起,周围的代码:

        window.tag = document.createElement('script');
        tag.src = "https://www.youtube.com/iframe_api";

        window.firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

        // 3. This function creates an <iframe> (and YouTube player)
        //    after the API code downloads.
        // window.player;
        window.onYouTubeIframeAPIReady = function() {
            player = new YT.Player('player', {
                height: '480',
                width: '853',
                playerVars: {
                    controls: 1,
                    modestbranding: 1,
                    playsinline: 1,
                    showinfo: 1,
                    iv_load_policy: 3,
                    rel: 0
                },
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        }
        window.onPlayerReady = function(event) {
            //wierd 404 errors sometimes
            event.target.loadPlaylist(videoIds, 0, 0, 'large');
            event.target.playVideo();
        }

        window.onPlayerStateChange = function(event) {
            console.log('the state changed: '+ event.data);
            if (event.data === 1) {
                console.log(event.target.getDuration());
                globalYoutubePlayerCounter++;
                console.log('youtube player count: ' +globalYoutubePlayerCounter);
            }
            if (globalYoutubePlayerCounter >= 6) {
                /* load the next set of videos */
                globalYoutubePlayerCounter = 0;
                console.log('playlist ended');
                if (that.finalTrackList.length > 0) {
                    that.getNextTenMusic(event.target);
                }else{
                    // recall for general searches;
                    // that.getNextTenGeneral(event.target);
                }
                /* load the next set of videos */
            }
        }

即使出现错误,所有视频列表的格式也正确。 Console.log 证实了这一点。

【问题讨论】:

  • 如果没有看到它周围的代码就很难判断...event.target 真的引用了播放器吗? videoIds 是一个格式良好的数组吗?通过使用 console.log 显示它们来检查。
  • 即使出现错误,所有视频列表的格式也正确。 Console.log 证实了这一点。 Event.target 是全局的,并在控制台中正确记录。
  • 它对我有用...JS Fiddle。我会看看你的代码。
  • 它在 80% 的时间里都有效,这让我很困惑
  • 如果我这样做,您的代码对我有用:尝试在 // 3. This function... 之前删除代码,并实际将 标签放在 after 您的代码,就像这样&lt;script src="https://www.youtube.com/iframe_api"&gt;&lt;/script&gt;。如果它适合你,我会解释。

标签: javascript youtube youtube-api google-api youtube-iframe-api


【解决方案1】:

我遇到了同样的问题,但loadVideoById。对我来说,问题是播放器没有完全初始化,因此真的没有方法 loadVideoById。也许如果有人遇到同样的问题,请尝试推迟通话,看看是否有帮助。

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-09-16
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多