有没有一种方法可以为嵌入式YouTube视频创建委派菜单(YouTube自动播放Chrome)

时间:2019-04-19 20:13:05

标签: javascript api iframe delegation autoplay

我尝试在我的一个项目网页中为youtube视频和基于视频的音频文件创建委派菜单,并且除Chrome之外,它们在FF,Safari,IE等中都可以正常运行。

我知道自版本66起(https://developers.google.com/web/updates/2017/09/autoplay-policy-changes),Chrome浏览器中的自动播放受到限制。

我得出了一个结论,那就是这可能是这里的问题,并通过播放静音(Chrome自动播放策略中的例外情况)对此进行了验证。

用户启动的播放即使在Chrome中也可以正常运行。因此,我想尝试的是将用户操作(单击外部播放按钮)委派给iframe视频,以使其接受播放。

   var player = YT.Player( ... )
   var player_elem = $(iframe#youtube_x);
 /* ... */
    case "play":
        // why mute? 
        // => https://developers.google.com/youtube/iframe_api_reference?hl=de#Autoplay_and_scripted_playback
        // => https://stackoverflow.com/questions/50507985/youtube-iframe-api-auto-play-not-working-for-chrome-and-video-resolution-set-not
        player.mute();
        pauseAll(); // 4all player as p => p.pauseVideo() 
        player.playVideo();
        setTimeout(function(){ 
            player.unMute();
                setTimeout(function(){ 
                  state = player.getPlayerState();
                  switch(state){
                    case 5:     // positioning
                    case -1:    // not started
                    case 0:     // ended
                    case 2:     // paused
                        Console.log("cant play content ...");
                            // player_elem.delegat() is deprecated
                        player_elem.on( 'click', null, event.data )

                        break;
                    case 3:     // buffering
                        Notice.console.log("still buffering .. ");
                    case 1:     // played
                        break;
                  }
                }, 300);
            delayedPlayerStateChanged(player_elem.attr("id"), ctrl_bar);
        }, 100);

        delayedPlayerStateChanged(player_elem.attr("id"), ctrl_bar);
        break;

我需要一个代码段,以从页面中委派用户操作“播放”,以被iframe接受为用户操作。镀铬甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

历史

首先,我试图简单地添加提及的(gesture-delegation article @github.com

delegatestickyuseractivation="media"

但这对我不起作用(YTs playVideo()仅在直接在YT视频iframe上进行交互之后才能起作用)。我还发现了有关委托粘性用户激活的文章,并且尚未正确实施。本文建议使用

gesture="media"
改为

html属性。

最后

..他的浏览器通过通知我(在JS开发控制台中)带来了该解决方案,因为iframe不支持姿态=“ media”,我应该尝试使用

allow="autoplay"

就这样,就这么简单。


<iframe id="youtube_{$vid.id}" 
        src="{$vid.uri}?{$vid.player_parameter}" 
        delegatestickyuseractivation="media" 
        allow="autoplay">
</iframe>

通知

此解决方案仅在用户与主页互动(嵌入youtube视频嵌入之类的媒体iframe)后生效。因此,这不是针对Chrome自动播放策略的解决方法。这只是将用户交互委派给iframe使其接受YT媒体控制命令的一种方法。