【问题标题】:youtube.com/iframe_api do not fire in IE11 or Edge in Windows 10youtube.com/iframe_api 不会在 IE11 或 Windows 10 的 Edge 中触发
【发布时间】:2017-10-16 21:45:32
【问题描述】:

我已经使用以下代码在我的网站上为 youtube 剪辑实现了 iframe_api。

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

// Setup Youtube player
var player;

// Get id of first clip
var ytVideoId = jQuery('.start-yt').attr('data-video-id');

// When API is ready, create player with above id
function onYouTubePlayerAPIReady() {
    player = new YT.Player('player', {
        height: '390',
        width: '640',
        videoId: ytVideoId,
        events: {
            'onReady': onPlayerReady
        }
    });
    console.log('API Ready');
}

// When player is ready
function onPlayerReady(event) {
    jQuery('.start-yt').addClass('play-icon');

    // Set glob var
    var ytGlobId ="";

    // Close button
    jQuery('.ytClose').click(function(){
        jQuery('.youtube-player-container').removeClass('active');
        player.pauseVideo();
    });

    jQuery('.youtube-player-container').click(function(){
        jQuery('.youtube-player-container').removeClass('active');
        player.pauseVideo();
    });

    // load or play clip
    jQuery('.start-yt').click(function(){
        jQuery('.youtube-player-container').addClass('active');

        if (ytGlobId == jQuery(this).attr('data-video-id')) {
            player.playVideo();
        } else {
            ytGlobId = jQuery(this).attr('data-video-id');
            player.loadVideoById(ytGlobId);
        }
    });

    console.log('Player Ready');
}

有效。但是有朋友有 Windows 10 和 IE11 + Edge。似乎'onReady': onPlayerReady 不会在那里开火。 console.logAPI Ready 但不是Player Ready 当我们检查过。它在控制台中没有给出错误,它只是不会触发并且可以工作。我已经使用相同的组合(Windows 10 + IE11/Edge)签入了 Browserstack,它似乎可以工作。

我已经在谷歌上搜索过答案,似乎有些人遇到过类似的问题,但我没有找到足够准确的示例来找到解决方案。

【问题讨论】:

    标签: jquery youtube youtube-api youtube-iframe-api


    【解决方案1】:

    正如thread 中所述,IFrame API 存在临时问题。 iFrame Player API 存在一个临时问题(已于 2013 年 6 月修复),您可以在此link 中阅读。

    作为临时修复,您只需在 onReady 事件中添加事件侦听器:

    function onReady() {
        player.addEventListener('onStateChange', function(e) {
            console.log('State is:', e.data);
        });
    }
    

    这是另一个可能也有帮助的帖子:Youtube Iframe API not working in Internet Explorer (11)

    【讨论】:

    • 谢谢@abielita。试过了,还是不行。
    • 我需要做的只是用一个 console.log 消息来攻击那个 eventlistner 吗?在我这样做之后,我在 Chrome Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://www.youtube.com') does not match the recipient window's origin ('https://dev3.axiell.com'). 中遇到错误,但播放器正在工作。但在 Edge/IE11 中仍然没有区别,它仍然失败。我还尝试将我的功能放在 eventlistner 中,但这会使所有浏览器中的播放器崩溃。
    • 对于同一件事的许多分裂的 cmets 感到抱歉。如我所见,问题在于函数onReady() 甚至根本不会被调用。因此,将 eventlistner 放在其中没有任何区别,因为 onReady() 在 Win10 + Edge/IE11 中根本不会触发。
    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2019-07-04
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多