Youtube 暂停所有具有相同类的 iframe

Posted

技术标签:

【中文标题】Youtube 暂停所有具有相同类的 iframe【英文标题】:Youtube pause all iframes with same class 【发布时间】:2013-01-12 06:12:38 【问题描述】:

我想通过简单的点击暂停所有 youtube 电影(与其 ID 无关)。我为可以使用特定 ID 的代码制作了一个 jsfiddle。但是,由于我无法分配唯一 ID,因此我希望能够暂停所有 youtube iframe。然而,iframe 确实有一个类。 http://jsfiddle.net/4bPAJ/3/ 感谢您在正确方向上的任何帮助:)

干杯, 阿德南

javascript

function callPlayer(e, t, n) 
    function o(e, t) 
        var n = e ? window.addEventListener : window.removeEventListener;
        n ? n("message", t, !1) : (e ? window.attachEvent : window.detachEvent)("onmessage", t)
    
    if (window.jQuery && e instanceof jQuery) e = e.get(0).id;
    var r = document.getElementById(e);
    if (r && r.tagName.toUpperCase() != "IFRAME") 
        r = r.getElementsByTagName("iframe")[0]
    
    if (!callPlayer.queue) callPlayer.queue = ;
    var i = callPlayer.queue[e],
        s = document.readyState == "complete";
    if (s && !r) 
        window.console && console.log("callPlayer: Frame not found; id=" + e);
        if (i) clearInterval(i.poller)
     else if (t === "listening") 
        if (r && r.contentWindow) 
            t = '"event":"listening","id":' + JSON.stringify("" + e) + "";
            r.contentWindow.postMessage(t, "*")
        
     else if (!s || r && (!r.contentWindow || i && !i.ready)) 
        if (!i) i = callPlayer.queue[e] = [];
        i.push([t, n]);
        if (!("poller" in i)) 
            i.poller = setInterval(function () 
                callPlayer(e, "listening")
            , 250);
            o(1, function u(t) 
                var n = JSON.parse(t.data);
                if (n && n.id == e && n.event == "onReady") 
                    clearInterval(i.poller);
                    i.ready = true;
                    o(0, u);
                    while (n = i.shift()) 
                        callPlayer(e, n[0], n[1])
                    
                
            , false)
        
     else if (r && r.contentWindow) 
        if (t.call) return t();
        r.contentWindow.postMessage(JSON.stringify(
            event: "command",
            func: t,
            args: n || [],
            id: e
        ), "*")
    

callPlayer("whateverID", "playVideo")

【问题讨论】:

【参考方案1】:

试试这个:

$(document).ready(function () 
    var i = 0;
    $(".youtubeplayer").each(function () 
        $(this).attr("id", "youtubeplayer" + i);
        callPlayer("youtubeplayer" + i, "playVideo");
        i++;
    );
);

这将为每一帧添加一个id,并在后面调用函数。

【讨论】:

谢谢:)。 vimeo API 比 youtube API 好得多,尽管 this.contentWindow.postMessage(' "method": "pause" ', "player.vimeo.com"); 就足够了

以上是关于Youtube 暂停所有具有相同类的 iframe的主要内容,如果未能解决你的问题,请参考以下文章

Youtube Iframe 禁用暂停视频

Youtube video iframe API - 如何在失去焦点时暂停视频?

动态创建的 iFrame 上的 YouTube iFrame API

JavaScript 通过具有相同类的播放按钮播放具有相同类控制的视频

无法通过 api 调用 pauseVideo 访问 youtube 嵌入式 iframe

Youtube iFrame API pauseVideo 在 UIWebView 中未定义