javascript - YouTube JS API的重大变化?自2013年2月27日起,如果没有videoid参数,它将不再初始化

标签 javascript youtube youtube-api

为了演示我今天发现的重大变化,我使用了基本的JS API示例页面,可以在下面的链接中找到该页面,并简单地注释掉videoId参数:

YT示例代码,显示初始化错误:http://www.multitask123.com/fmgem/YT_Sample2.htm

通过删除videoId参数,播放器现在将在嵌入式播放器中显示/初始化并显示以下错误消息:“发生错误。请稍后再试。”直到今天下午才如此。

在过去的三个月中,我可以按以下方式调用YouTubePlayerAPIReady,并且不会出现错误消息:

function onYouTubePlayerAPIReady() {
        player = new YT.Player('player', {
            height: '390',
            width: '640',
            //videoId: 'JW5meKfy3fY', - COMMENTED OUT INTENTIONALLY! HARD REQUIREMENT!
            events: {
                'onReady': onPlayerReady,
                'onError': onPlayerError,
                'onStateChange': onPlayerStateChange
            }
        });
    }

该错误在初始化期间由onPlayerError事件处理程序捕获,并且该错误随“evt”参数的data属性一起出现。因此,onPlayerError(evt)在初始化时被调用,并且evt.data =2。该值记录为“请求包含无效的参数值”,这显然是API要求的videoId。

我不想过多介绍细节,但是我花费了无数时间来使播放器初始化正常工作,因为存在许多跨浏览器初始化问题。我需要隐藏播放器,直到真正需要它来播放某些内容为止。

我忘记了哪个浏览器是罪魁祸首,但是其中一个实际上迫使我向播放器显示,即使没有视频在播放。

我发现我无法延迟加载/ JIT嵌入式播放器,因为它是异步加载的,因此,如果我尝试仅在用户希望实际观看视频时加载它,或者所涉及的URL的其他参数会加载播放列表,例如播放器会因为我无法同时初始化播放器并要求其播放视频而感到沮丧。

因此,最重要的是要在页面加载时初始化播放器NEEDS,但不使用videoId参数,因为很简单,我不知道在90%的情况下将要播放什么,即使我这样做了,对不同API进行不同异步调用的结果。我说这是因为用videoid初始化它的解决方案是 Not Acceptable 。

YouTube API非常棒,我非常喜欢它,以至于我花了18个月的时间开发http://www.fmgem.com,现在这一重大变化正在破坏Beta版用户对我的应用的第一印象。因此,如果YT API小组确实进行了监视,请改回原先的状态。上面加糖就好了。 :))

几周前发生了类似的情况,加载时使用了相同函数的wmode属性。

// wmode:'opaque'// ---在Chrome中导致严重的错误-而且我能够将不透明更改为透明,因此在那里没有大的问题,但这需要我检查整个体系结构并有条理地处理apx 9不同的异步用法-再次出现负载的情况,都出现了跨浏览器的怪癖。

因此,我不能无所事事,我被迫在http://www.fmgem.com的实时代码中放入“打喷嚏的小 Pandas ” videoId,但这看起来非常不专业,除非我回顾一下整个体系结构,否则它只是一个创可贴。团队实际上承认这是一个重大变化,然后将其恢复为先前的行为。

在2013年2月27日下午的某个时候,某些用户检测到了此错误,而我在google小组上读到,YouTube的开发人员对此进行了监控。

任何答复,解决方案,指导或确认将不胜感激。

谢谢!!

最佳答案

您最初可以加载0秒的空白电影。或者,您可以稍微重新排列代码。

不要自己调用onYouTubePlayerAPIReady函数。请改用标志变量:

var playerAPIReady;
var player;

在API文件调用onYouTubePlayerAPIReady函数时设置第一个变量:
function onYouTubePlayerAPIReady() {
    playerAPIReady = true;
}

当用户选择播放第一个视频时,设置第二个变量:
function createPlayerAndPlayVideo(id) {
    if(! playerAPIReady) {
        // player API file not loaded
        return;
    }
    if (! player) {
        player = new YT.Player('player', {
            height: '390',
            width: '640',
            videoId: id
            events: {
                'onReady': onPlayerReady,
                'onError': onPlayerError,
                'onStateChange': onPlayerStateChange
            }
        });
    } else {
        player.loadVideoById(id);
    }
}

else块所示,将同一播放器重新用于后续视频。

关于javascript - YouTube JS API的重大变化?自2013年2月27日起,如果没有videoid参数,它将不再初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128910/

相关文章:

python - 如何通过 Selenium 和 Python 使用用户代理单击 YouTube 评论中的 YouTube 链接

dns - 使用基于 DNS 的系统来解锁被阻止的 URL?

javascript - 需要将YouTube视频加载到单独的HTML页面中

youtube - 通过 API 获得喜欢的 YouTube 视频

javascript - 解析 header X-XSS-Protection 时出错 - Google Chrome

youtube-api - v2 api key 控制台去哪里了?

javascript - 使用 Promises 在 for 循环中调用 API 的最佳方法

javascript - 如何从属性访问其他对象属性

javascript - angular-ui ui-calendar 不更新事件源对象/ng-model 的更改

javascript - Kendo UI Grid 在初始读取时未显示微调器/加载图标