javascript - YouTube iFrame API : Setting origin breaks video events + VEVO doesn't work - December 2015

标签 javascript cordova youtube-api youtube-iframe-api

长话短说

设置原点可防止触发所有视频事件。

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
                    }
                }
            });

最佳答案

我尝试使用 youtube iframe api reference 中的示例 html 重新创建它(通过将视频 ID 更改为 vevo 视频)。我得到了几乎相同的错误。

errorcode=150&reason=This+video+contains+content+from+VEVO.+It+is+restricted+from+playback+on+certain+sites.%3Cbr%2F%3E%3Cu%3E%3Ca+href %3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdqbDc_pPz5E%26feature%3Dplayer_embedded%27+target%3D%27_blank%27%3EWatch+on+YouTube%3C%2Fa%3E%3C%2Fu %3E&c=WEB&cos=X11&status=fail&atc=a%3D3%26b%3DEZgb9KYK4gp-FS7CEwnU5BC3L2U%26c%3D1450423660%26d%3D1%26e%3DdqbDc_pPz5E%26c3a%3D26%26c1a%3D1%26c6a%3D1%26hh%3DUiaK9QLmjOspFp50bvF_ht_oeqU&cbr=Chrome&eventid=bLVzVpr2KInQ4QKx3qOoCQ&errordetail =0&csi_page_type=embed&cbrver=47.0.2526.80&enablecsi=1

如文档中所述,错误 150 与所述错误 101 相同 here .错误 101 表示

101 – The owner of the requested video does not allow it to be played in embedded players.

这超出了您的控制范围,因为您不拥有该视频。即使您找到了一些修复方法,也不能保证它会持续下去。

所以我建议您只使用错误代码并转到下一个可玩项目。

关于javascript - YouTube iFrame API : Setting origin breaks video events + VEVO doesn't work - December 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345124/

相关文章:

ios - 在 iOS/iPhone 上的 Ionic/Cordova/PhoneGap 应用程序中嵌入 YouTube 视频

php - 第 3 方应用程序上的 Youtube 通知

api - 如何使用YouTube API获取每个YouTube channel 的 channel 类型或类别?

Javascript 函数未被调用 hx :commandExButton 的 onclick

javascript - nodejs中zip的多线程

javascript - 在新标签页中打开 : how is 'Bing' doing this? (IE9)

ios - phonegap cordova API window.requestFileSystem() LocalFileSystem.PERSISTENT

javascript - Jquery "stepped"循环迭代

android - Windows 8.1 64 位 "ionic build android": Error: Hook failed with error code ENOENT

javascript - 通过简单的JS强制iframe自动播放