【发布时间】:2016-03-24 13:02:20
【问题描述】:
TL;DR
设置原点可防止所有视频事件触发。
VEVO 视频不适用于 YouTube API。错误 150。
我正在使用 PhoneGap 开发一个应用程序,我们在几周前(2015 年 12 月上旬)遇到了一个问题。
当我们第一次开发应用程序时,我们注意到 VEVO 视频无法与我们的 API 集成一起使用,并在网上找到了说明我们应该设置来源的文档。我们将原点设置为我们的网站(2015 年 11 月左右),它似乎为我们解决了问题。在那个时间点,VEVO 视频有效并且视频中的事件有效(onReady、onStateChange 等)。
但是,在几周前(2015 年 12 月上旬),API onReady 和 onStateChange 事件不再触发,并且该应用无法处理 YouTube 视频。那时,我发现如果我从新 YT.Player 的 playerVars 部分中删除 origin: sample.com 代码,onReady 和 onStateChange 事件会再次起作用,但 VEVO 视频没有。
我还尝试了人们提供的所有其他解决方案,但均无济于事。就目前而言,无论我们尝试什么,都无法使用 YouTube API 播放 VEVO 视频。当 API 尝试播放 VEVO 视频时,它会输出错误代码“150”。此外,如果我们设置源,它会完全破坏 YouTube API 事件,因此我们的应用程序将停止运行。
这必须是 YouTube 端的某种更改,因为我们注意到在未更改应用中的任何代码的情况下弹出此问题。
请帮忙,因为现在我们的应用程序碰壁了。
VEVO 再次来袭……
以下是我们用于创建 YT 播放器的一些代码。
//load YT api asynchronously
var yt_tag = document.createElement('script');
yt_tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(yt_tag, firstScriptTag);
yt_player = new YT.Player(playlist[playlist_index].yt_id, {
height : '220',
width : (jQuery('#playlist').width() * .98),
videoId : playlist[playlist_index].yt_id,
playerVars : {
//controls: 0,
//'enablejsapi' : 1,
'wmode' : 'transparent',
//'origin' : 'http://example.com',
//'rel' : 0
},
//autoPlay: true,
events : {
'onError' : function(event) {
if (dev_mode) alert(event.data);
},
'onReady' : function(yt_event) {
//this doesnt work
},
'onStateChange' : function(event) {
//this doesnt work
}
}
});
【问题讨论】:
-
Google 为他们的 API 提供支持真是太好了……讽刺
-
在 ionic 上遇到了同样的问题,除了使用原生 android youtube 库之外,您是否有过解决方案?
标签: javascript cordova youtube-api youtube-iframe-api