YouTube IFrame 播放器无法正确执行cuePlayList

问题描述

我有一个网站,在那里我在 IFrame 中创建了一个 YouTube 播放器,并根据用户点击的内容抓取不同的播放列表。所以它调用 player.cuePlaylist({listType:"playlist",list:playListID}) 其中 playListID 是当用户调用不同的播放列表时会发生变化的变量。问题是该函数第一次执行时它工作正常,但是一旦第二次要求它提示新的播放列表,它就什么也不做,也没有 400 错误消息或任何东西,但是当我调用第二个时播放列表第二次,它起作用了。

这个cuePlayList 函数似乎被窃听了,因为这不是在一两个月前发生的。我能看到的对 youtube Iframe API 的唯一更改是关于搜索列表,而不是您可以阅读的播放列表here

我在此 jsfiddle 中重新创建了错误。只需按下“新播放列表”按钮,它就会加载正确的播放列表,按下另一个播放列表,直到按下两次它才会执行任何操作。

所以我做错了什么还是在 YouTube 的 IFrame API 端?

提前致谢!

解决方法

不是破坏播放器,这意味着您不能再使用 cuePlaylist()loadPlaylist(),我发现如果您像这样调用提示/加载函数两次,播放器会接受新的播放列表:{ {3}}

我通过将 cuePlaylist() 函数链接到一个按钮并注意到您需要单击两次才能正确更新播放列表,从而发现了这个问题。空调用和实际调用之间似乎需要延迟,因此我将其设置为 500 毫秒。

,

我通过销毁播放器并使用我想要加载的播放列表初始化一个新播放器来实现一种解决方法。

    embed.destroy();
    embed = new YT.Player('video-placeholder',{
        width: 600,height: 400,playerVars:
            {
                listType: 'playlist',list: playlistId,index: 0
            },events: {
            'onReady': function (event) {
                player = event.target;
            }
        }
    });