该网站如何以叠加方式显示此youtube视频?

时间:2018-08-12 18:54:18

标签: javascript iframe youtube

我一直在尝试了解来自该网站Meg的main.min.js文件中的哪些代码段将youtube视频作为iframe插入了叠加层。

<iframe id="auto-play-vid" frameborder="0" allowfullscreen="1" allow="autoplay; encrypted-media" title="YouTube video player" width="100%" height="360" src="https://www.youtube.com/embed/bsLk0NPRFAc?rel=0&amp;playsinline=0&amp;autoplay=1&amp;controls=1&amp;enablejsapi=1&amp;showinfo=0&amp;suggestedQuality=hd720&amp;wmode=transparent&amp;iv_load_policy=3&amp;origin=http%3A%2F%2Foutlawed-movie.test%3A8888&amp;widgetid=2"></iframe>

当我下载代码时,id =“ youtube-overlay”为空,其中没有包含YouTube视频的iframe。但是,当我在浏览器中打开index.html文件时,视频会播放...为什么以及如何完成此操作?

        

    </div>
    <div id="auto-play-close">
        <div class="back">
            <svg fill="#ffffff" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
                <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
                <path d="M0 0h24v24H0z" fill="none" />
            </svg>
        </div>
        <div class="front">
            <svg fill="#c7ef00" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
                <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
                <path d="M0 0h24v24H0z" fill="none" />
            </svg>
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:1)

    function e() {
        $("#youtube-overlay").css("display", "flex"),
        utilsController.checkYouTube() ? setTimeout(function() {
            t = function() {
                try {
                    n.pauseVideo()
                } catch (e) {}
            }
            ,
            s = function() {
                try {
                    n.playVideo()
                } catch (e) {}
            }
            ,
            h || _isIpad || ($(window).bind("focusout", t),
            $(window).bind("focusin", s)),
            $("#auto-play-close").on("click", function() {
                try {
                    n.destroy()
                } catch (e) {
                    console.log(e)
                }
                h || _isIpad || ($(window).unbind("focusout", t),
                $(window).unbind("focusin", s)),
                $("#youtube-overlay").css("display", "none"),
                v = !1,
                _ && b(),
                i && "true" === i && f()
            }),
            n = new YT.Player("auto-play-vid",{
                width: "100%",
                videoId: o,
                playerVars: {
                    rel: 0,
                    playsinline: 0,
                    autoplay: h || _isIpad ? 0 : 1,
                    controls: 1,
                    enablejsapi: 1,
                    showinfo: 0,
                    suggestedQuality: "hd720",
                    wmode: "transparent",
                    iv_load_policy: "3"
                },
                events: {
                    onReady: onPlayerReady,
                    onStateChange: function(e) {
                        e && 0 == e.data && ($("#youtube-overlay").css("display", "none"),
                        v = !1,
                        _ && b(),
                        f())
                    }
                }
            })
        }, 300) : setTimeout(e, 1e3)
    }()
}

此部分在运行时(大概是在页面加载时)将#youtube-overly div的显示属性切换为flex(而不是none),以允许div取{{ fixed的1}}位置(即固定在四个角处-全屏显示)并显示0,0,0,0,该iframe在更改CSS之前已经在div中。

onStateChange将其切换回none并隐藏div,然后进行一些难以从缩略代码中读取的检查。

tldr; iframe位于“隐藏”的div中,由上面的代码段“显示”(以及与问题不一定相关的其他内容)