为了演示我今天发现的重大变化,我采用了基本的 JS API 示例页面,可以通过下面的链接找到该页面,并简单地注释掉 videoId 参数:
演示初始化错误的 YT 示例代码:http: //www.multitask123.com/fmgem/YT_Sample2.htm
删除 videoId 参数后,播放器现在将在嵌入式播放器中显示/初始化以下错误消息:“发生错误。请稍后再试。” 直到今天下午才出现这种情况。
在过去的三个月里,我可以按如下方式调用 onYouTubePlayerAPIReady 并且不会出现错误消息:
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”参数的数据属性一起出现。所以 onPlayerError(evt) 在初始化和 evt.data = 2 时被调用。这个值被记录为“请求包含一个无效的参数值”,这显然是 API 需要一个 videoId。
我不想讲太多细节,但我花了无数个小时让播放器的初始化正常工作,因为有许多跨浏览器初始化问题。我需要隐藏播放器,直到我真正需要它来播放某些东西。
我忘记了哪个浏览器是罪魁祸首,但其中一个实际上迫使我显示播放器,即使没有播放视频。
我发现我不能延迟加载/JIT 嵌入式播放器,因为它是异步加载的,所以如果我尝试仅在我的用户希望实际观看视频或涉及的 URL 的其他参数将加载播放列表(例如播放器)时加载它会犹豫,因为我不能同时初始化播放器并要求它播放视频。
所以底线是在页面加载时需要初始化播放器,但不需要使用 videoId 参数,因为很简单,我不知道在 90% 的情况下会播放什么,即使我这样做了对不同 API 的不同异步调用的结果。我这样说是因为用 videoid 初始化它的解决方案是不可接受的。
YouTube API 非常棒,我非常喜欢它,以至于我花了 18 个月的时间来开发http://www.fmgem.com,现在这个重大变化正在破坏 beta 用户对我的应用程序的第一印象。因此,如果 YT API 团队确实对此进行了监控,请将其改回。很高兴在上面加糖。:))
几周前发生了类似的事情,加载时使用相同函数的 wmode 属性。
//wmode: 'opaque' //--- 在 Chrome 中导致邪恶的错误 - 我能够将不透明更改为透明,所以没有什么大不了的,但这需要我审查我的整个架构并有条不紊地处理 apx 9 不同的异步使用 -再次加载的案例都有跨浏览器的怪癖。
所以我不能被动反应,我不得不在http://www.fmgem.com的实时代码中放入一个“打喷嚏的熊猫宝宝”videoId,但这看起来很不专业,它只是一个创可贴,直到我可以查看整个架构,除非 YT 团队确实承认这是一个重大更改,然后将其恢复为之前的行为。
这在 2013 年 2 月 27 日下午的某个时间被一些用户检测到,我在谷歌群组上读到 YouTube 的开发人员监控 SO。
任何答案、解决方案、指导或确认将不胜感激。
谢谢!!