<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://esu.lol/index.php?action=history&amp;feed=atom&amp;title=Widget%3ABilibiliVideo</id>
	<title>Widget:BilibiliVideo - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://esu.lol/index.php?action=history&amp;feed=atom&amp;title=Widget%3ABilibiliVideo"/>
	<link rel="alternate" type="text/html" href="https://esu.lol/index.php?title=Widget:BilibiliVideo&amp;action=history"/>
	<updated>2026-06-17T03:15:57Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://esu.lol/index.php?title=Widget:BilibiliVideo&amp;diff=85757&amp;oldid=prev</id>
		<title>Amulet：​创建页面，内容为“&lt;/noinclude&gt;&lt;includeonly&gt;&lt;!--{if !isset($wgBilibili) || !$wgBilibili}--&gt;&lt;!--{assign var=&quot;wgBilibili&quot; value=true scope=&quot;global&quot;}--&gt;&lt;style&gt; .bilibili-video-container {     border: 1px solid rgba(170,170,170,0.37);     max-width: 100%; } .bilibili-video-container.exec {     display: table; } .bilibili-iframe-container, .bilibili-video-container {     display: none; } .bilibili-video-container, .bilibili-video-container .bilibili-widescreen, .bilibili-video-contain…”</title>
		<link rel="alternate" type="text/html" href="https://esu.lol/index.php?title=Widget:BilibiliVideo&amp;diff=85757&amp;oldid=prev"/>
		<updated>2026-06-16T15:06:51Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--{if !isset($wgBilibili) || !$wgBilibili}--&amp;gt;&amp;lt;!--{assign var=&amp;quot;wgBilibili&amp;quot; value=true scope=&amp;quot;global&amp;quot;}--&amp;gt;&amp;lt;style&amp;gt; .bilibili-video-container {     border: 1px solid rgba(170,170,170,0.37);     max-width: 100%; } .bilibili-video-container.exec {     display: table; } .bilibili-iframe-container, .bilibili-video-container {     display: none; } .bilibili-video-container, .bilibili-video-container .bilibili-widescreen, .bilibili-video-contain…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--{if !isset($wgBilibili) || !$wgBilibili}--&amp;gt;&amp;lt;!--{assign var=&amp;quot;wgBilibili&amp;quot; value=true scope=&amp;quot;global&amp;quot;}--&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bilibili-video-container {&lt;br /&gt;
    border: 1px solid rgba(170,170,170,0.37);&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container.exec {&lt;br /&gt;
    display: table;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-container,&lt;br /&gt;
.bilibili-video-container {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container,&lt;br /&gt;
.bilibili-video-container .bilibili-widescreen,&lt;br /&gt;
.bilibili-video-container iframe {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    background-color: #fff!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-title {&lt;br /&gt;
    padding: .2em 6.5em .2em 1em;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-title a {&lt;br /&gt;
    word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-widescreen {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    display: none;&lt;br /&gt;
    width: 1em;&lt;br /&gt;
    right: calc(-2rem - 1px);&lt;br /&gt;
    border: 1px solid rgba(170,170,170,0.37);&lt;br /&gt;
    padding: .25rem .5rem;&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
    top: -2px;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.onshow .bilibili-widescreen{&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-toggle {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(50% - .5em);&lt;br /&gt;
    right: .7em;&lt;br /&gt;
    line-height: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    background-image: url(/skins/Vector/images/search-ltr.png?39f97);&lt;br /&gt;
    background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2212%22%20height=%2213%22%3E%20%3Cg%20fill=%22none%22%20stroke=%22%2354595d%22%20stroke-width=%222%22%3E%20%3Cpath%20d=%22M11.29%2011.71l-4-4%22/%3E%20%3Ccircle%20cx=%225%22%20cy=%225%22%20r=%224%22/%3E%20%3C/g%3E%20%3C/svg%3E);&lt;br /&gt;
    background-position: left center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-toggle:hover {&lt;br /&gt;
    color: #36b;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-button,&lt;br /&gt;
.bilibili-video-button:visited {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin: 4px 5px;&lt;br /&gt;
    padding: 10px 25px;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    background: #de698c;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-container {&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    border: 0 solid rgba(170,170,170,0.37);&lt;br /&gt;
    border-top-width: 1px;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container:not([data-max-width]) .bilibili-iframe-container {&lt;br /&gt;
    max-width: calc(100% - 12px)!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container:not([data-max-width]).onshow .bilibili-iframe-container {&lt;br /&gt;
    max-height: calc(100% - 27px)!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container textarea {&lt;br /&gt;
    background: white;&lt;br /&gt;
    color: black;&lt;br /&gt;
    width: 80%;&lt;br /&gt;
    margin: auto;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-overlay {&lt;br /&gt;
    width: 0;&lt;br /&gt;
    height: 0;&lt;br /&gt;
    padding-top: 30%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    background: rgb(167, 215, 249);&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 3px;&lt;br /&gt;
    left: 6px;&lt;br /&gt;
    z-index: 2;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-retry-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 10px;&lt;br /&gt;
    right: 10px;&lt;br /&gt;
    display: none;&lt;br /&gt;
    background: white;&lt;br /&gt;
    padding: 0 0.5em;&lt;br /&gt;
}&lt;br /&gt;
html &amp;gt; body &amp;gt; .navpopup .bilibili-video-container &amp;gt; * {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
html &amp;gt; body &amp;gt; .navpopup .bilibili-video-container::before {&lt;br /&gt;
    content: &amp;quot;请不要在注释里使用 BilibiliVideo 模板&amp;quot;;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
(window.RLQ ||= []).push([&lt;br /&gt;
    [&lt;br /&gt;
        &amp;quot;mediawiki.base&amp;quot;,&lt;br /&gt;
        &amp;quot;jquery&amp;quot;,&lt;br /&gt;
    ],&lt;br /&gt;
    async () =&amp;gt; {&lt;br /&gt;
        const errMsg = {&lt;br /&gt;
            id: &amp;#039;此处填写的id有误，请参考&amp;lt;a href=&amp;quot;/Template:BilibiliVideo#firstHeading&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;模板文档&amp;lt;/a&amp;gt;修正……&amp;#039;,&lt;br /&gt;
            error: &amp;quot;执行出现问题，请复制以下内容并在提问求助区处粘贴寻求帮助：$$$&amp;quot;,&lt;br /&gt;
            attr: &amp;#039;下方填写的参数 $$$ 有误，请参考&amp;lt;a href=&amp;quot;/Template:BilibiliVideo#firstHeading&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;模板文档&amp;lt;/a&amp;gt;修正……&amp;#039;,&lt;br /&gt;
        };&lt;br /&gt;
        await $.ready;&lt;br /&gt;
        const ifNamespaceAllow = [0, 4, 10, 12].includes(mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;));&lt;br /&gt;
        const sanNode = $(`&amp;lt;${&amp;quot;span/&amp;quot;}&amp;gt;`);&lt;br /&gt;
        const genErr = (type, msg = &amp;quot;&amp;quot;) =&amp;gt; Reflect.has(errMsg, type) ? `&amp;lt;${&amp;quot;div&amp;quot;} style=&amp;quot;font-style: italic; border: 1px dashed red;&amp;quot;&amp;gt;BilibiliVideo模板：${errMsg[type].replace(&amp;quot;$$$&amp;quot;, sanNode.text(msg).html())}&amp;lt;${&amp;quot;/div&amp;quot;}&amp;gt;` : &amp;quot;&amp;quot;;&lt;br /&gt;
        const injectErrMsgBefore = ($ele, type, msg = &amp;quot;&amp;quot;) =&amp;gt; $ele.before(genErr(type, msg));&lt;br /&gt;
        const getErrorType = (code) =&amp;gt; {&lt;br /&gt;
            switch (code) {&lt;br /&gt;
                case 62003: {&lt;br /&gt;
                    return false;&lt;br /&gt;
                }&lt;br /&gt;
                case -403: {&lt;br /&gt;
                    return &amp;quot;forbidden&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
                default: {&lt;br /&gt;
                    return &amp;quot;failed&amp;quot;;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        /**&lt;br /&gt;
     * @param { string } id&lt;br /&gt;
     */&lt;br /&gt;
        const idCorrector = (id) =&amp;gt; {&lt;br /&gt;
            let type = false;&lt;br /&gt;
            // 1. 有明确的 av 前缀且符合 aid 规则&lt;br /&gt;
            if (/^av[1-9]\d*$/i.test(id)) {&lt;br /&gt;
                type = &amp;quot;av&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            // 2. 有明确的 bv 前缀且符合 bvid 规则&lt;br /&gt;
            else if (/^[bB][vV]1[FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9}$/.test(id)) {&lt;br /&gt;
                type = &amp;quot;bv&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            // 3. 没有明确的前缀，但符合 aid 规则&lt;br /&gt;
            else if (/^[1-9]\d*$/.test(id)) {&lt;br /&gt;
                type = &amp;quot;av&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            // 4. 没有明确的前缀，但符合 bvid 规则且不符合 aid 规则&lt;br /&gt;
            else if (/^1?[FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9}$/.test(id)) {&lt;br /&gt;
                type = &amp;quot;bv&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            // 5. 无法判断&lt;br /&gt;
&lt;br /&gt;
            if (type === &amp;quot;av&amp;quot;) {&lt;br /&gt;
                return {&lt;br /&gt;
                    id: id.replace(/^av/i, &amp;quot;&amp;quot;),&lt;br /&gt;
                    prefix: {&lt;br /&gt;
                        href: &amp;quot;av&amp;quot;,&lt;br /&gt;
                        iframe: &amp;quot;aid&amp;quot;,&lt;br /&gt;
                    },&lt;br /&gt;
                };&lt;br /&gt;
            }&lt;br /&gt;
            if (type === &amp;quot;bv&amp;quot;) {&lt;br /&gt;
                return {&lt;br /&gt;
                    id: id.replace(/^.*([FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9})$/i, &amp;quot;1$1&amp;quot;),&lt;br /&gt;
                    prefix: {&lt;br /&gt;
                        href: &amp;quot;BV&amp;quot;,&lt;br /&gt;
                        iframe: &amp;quot;bvid&amp;quot;,&lt;br /&gt;
                    },&lt;br /&gt;
                };&lt;br /&gt;
            }&lt;br /&gt;
            return false;&lt;br /&gt;
        };&lt;br /&gt;
        try {&lt;br /&gt;
            const isNaN = Number.isNaN || window.isNaN;&lt;br /&gt;
            const cssLengthUnitValidator = (length, defaultValue, callback, paramName, $ele) =&amp;gt; {&lt;br /&gt;
                if (typeof length !== &amp;quot;string&amp;quot; || length.length === 0) {&lt;br /&gt;
                    callback(false);&lt;br /&gt;
                    return defaultValue;&lt;br /&gt;
                }&lt;br /&gt;
                const parsedNumber = parseFloat(length.replace(/[a-z]+/i, &amp;quot;&amp;quot;));&lt;br /&gt;
                if (isNaN(parsedNumber) || parsedNumber &amp;lt;= 0) {&lt;br /&gt;
                    callback(false);&lt;br /&gt;
                    injectErrMsgBefore($ele, &amp;quot;attr&amp;quot;, paramName);&lt;br /&gt;
                    return defaultValue;&lt;br /&gt;
                }&lt;br /&gt;
                if (/^(?:\d+|\d*\.\d+)(?:em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|Q|in|pc|pt|px|%)$/.test(length)) {&lt;br /&gt;
                    callback(true);&lt;br /&gt;
                    return length;&lt;br /&gt;
                }&lt;br /&gt;
                if (/^(?:\d+|\d*\.\d+)$/.test(length)) {&lt;br /&gt;
                    callback(true);&lt;br /&gt;
                    return `${length}px`;&lt;br /&gt;
                }&lt;br /&gt;
                callback(false);&lt;br /&gt;
                injectErrMsgBefore($ele, &amp;quot;attr&amp;quot;, paramName);&lt;br /&gt;
                return defaultValue;&lt;br /&gt;
            };&lt;br /&gt;
            const fixedNumber = (number) =&amp;gt; `${+number &amp;lt; 10 ? &amp;quot;0&amp;quot; : &amp;quot;&amp;quot;}${number}`;&lt;br /&gt;
            const secondsParser = (seconds) =&amp;gt; `${Math.floor(+seconds / 60)}:${fixedNumber(+seconds % 60)}`;&lt;br /&gt;
            const submit = (ids) =&amp;gt; {&lt;br /&gt;
                /* not applicable */&lt;br /&gt;
            };&lt;br /&gt;
            const global_element = $(&amp;quot;#mw-content-text&amp;quot;);&lt;br /&gt;
            const placeholderToggle = (iframe) =&amp;gt; {&lt;br /&gt;
                if (iframe.data(&amp;quot;displayFlag&amp;quot;)) {&lt;br /&gt;
                    iframe.data(&amp;quot;displayFlag&amp;quot;, false);&lt;br /&gt;
                    iframe.data(&amp;quot;placeholder&amp;quot;).fadeOut(370);&lt;br /&gt;
                }&lt;br /&gt;
            };&lt;br /&gt;
            let lazyLoadObserver;&lt;br /&gt;
            if (Reflect.has(window, &amp;quot;IntersectionObserver&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
                Reflect.has(window, &amp;quot;IntersectionObserverEntry&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
                Reflect.has(window.IntersectionObserverEntry.prototype, &amp;quot;intersectionRatio&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
                Reflect.has(window.IntersectionObserverEntry.prototype, &amp;quot;isIntersecting&amp;quot;)) {&lt;br /&gt;
                lazyLoadObserver = new IntersectionObserver((entries) =&amp;gt; {&lt;br /&gt;
                    entries.forEach((entry) =&amp;gt; {&lt;br /&gt;
                        if (entry.isIntersecting) {&lt;br /&gt;
                            entry.target.src = entry.target.dataset.src;&lt;br /&gt;
                            setTimeout(() =&amp;gt; {&lt;br /&gt;
                                placeholderToggle($(entry.target));&lt;br /&gt;
                            }, 13070);&lt;br /&gt;
                            lazyLoadObserver.unobserve(entry.target);&lt;br /&gt;
                        }&lt;br /&gt;
                    });&lt;br /&gt;
                });&lt;br /&gt;
            } else {&lt;br /&gt;
                lazyLoadObserver = {&lt;br /&gt;
                    observe: (target) =&amp;gt; {&lt;br /&gt;
                        target.src = target.dataset.src;&lt;br /&gt;
                        setTimeout(() =&amp;gt; {&lt;br /&gt;
                            placeholderToggle($(target));&lt;br /&gt;
                        }, 13070);&lt;br /&gt;
                    },&lt;br /&gt;
                };&lt;br /&gt;
            }&lt;br /&gt;
            const iframe_href_base = &amp;quot;https://www.bilibili.com/blackboard/newplayer.html?playlist=true&amp;amp;playlist_order=sequential&amp;amp;musth5=1&amp;amp;noEndPanel=1&amp;amp;crossDomain=1&amp;amp;autoplay=0&amp;amp;&amp;quot;;&lt;br /&gt;
            const EPSILON = 2.220446049250313e-16,&lt;br /&gt;
                rememberWH = (ele) =&amp;gt; {&lt;br /&gt;
                    ele.data({ width: ele.width(), height: ele.height() });&lt;br /&gt;
                },&lt;br /&gt;
                setTureHeight = (ele) =&amp;gt; {&lt;br /&gt;
                    const barHeight = ele.data(&amp;quot;height&amp;quot;) - ele.data(&amp;quot;width&amp;quot;) * 9 / 16; //计算标题和播放器控制栏高度&lt;br /&gt;
                    ele.height(ele.width() * 9 / 16 + barHeight);&lt;br /&gt;
                },&lt;br /&gt;
                setWH = (ele) =&amp;gt; {&lt;br /&gt;
                    ele.css({ width: &amp;quot;100%&amp;quot;, height: &amp;quot;100%&amp;quot; });&lt;br /&gt;
                },&lt;br /&gt;
                recallWH = (ele) =&amp;gt; {&lt;br /&gt;
                    ele.width(ele.data(&amp;quot;width&amp;quot;)).height(ele.data(&amp;quot;height&amp;quot;));&lt;br /&gt;
                },&lt;br /&gt;
                setMaxHeight = (container, target) =&amp;gt; {&lt;br /&gt;
                    const h = container.outerHeight(true);&lt;br /&gt;
                    let t = 0;&lt;br /&gt;
                    container.children().each((_, ele) =&amp;gt; {&lt;br /&gt;
                        t += $(ele).outerHeight(true);&lt;br /&gt;
                    });&lt;br /&gt;
                    target.css(&amp;quot;max-height&amp;quot;, `calc(100% - ${parseInt(t - h + 2 - (Number.EPSILON || EPSILON))}px)`);&lt;br /&gt;
                };&lt;br /&gt;
            const run = () =&amp;gt; {&lt;br /&gt;
                const ids = {&lt;br /&gt;
                    failed: {&lt;br /&gt;
                        aid: new Set(),&lt;br /&gt;
                        bvid: new Set(),&lt;br /&gt;
                    },&lt;br /&gt;
                    forbidden: {&lt;br /&gt;
                        aid: new Set(),&lt;br /&gt;
                        bvid: new Set(),&lt;br /&gt;
                    },&lt;br /&gt;
                    pending: 0,&lt;br /&gt;
                };&lt;br /&gt;
                const targets = $(&amp;quot;.bilibili-video-container:not(.exec)&amp;quot;);&lt;br /&gt;
                ids.pending = targets.length;&lt;br /&gt;
                targets.addClass(&amp;quot;exec&amp;quot;).each((_, ele) =&amp;gt; {&lt;br /&gt;
                    const { dataset } = ele;&lt;br /&gt;
                    const _id = dataset.id;&lt;br /&gt;
                    const selfbox = $(ele);&lt;br /&gt;
                    const toggleButton = selfbox.find(&amp;quot;.bilibili-toggle&amp;quot;);&lt;br /&gt;
                    const widescreenButton = selfbox.find(&amp;quot;.bilibili-widescreen&amp;quot;);&lt;br /&gt;
                    const validation = idCorrector(_id);&lt;br /&gt;
                    if (!validation) {&lt;br /&gt;
                        ele.outerHTML = genErr(&amp;quot;id&amp;quot;);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    const { id, prefix } = validation;&lt;br /&gt;
                    let page = parseInt(+(dataset.page || 1));&lt;br /&gt;
                    if (isNaN(page) || page &amp;lt; 1) {&lt;br /&gt;
                        page = 1;&lt;br /&gt;
                        if (typeof dataset.page === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; dataset.page !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            injectErrMsgBefore(selfbox, &amp;quot;attr&amp;quot;, &amp;quot;page&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    const { pagename, title } = dataset;&lt;br /&gt;
                    const height = cssLengthUnitValidator(dataset.height, &amp;quot;441px&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-height&amp;quot;), &amp;quot;height&amp;quot;, selfbox);&lt;br /&gt;
                    const width = cssLengthUnitValidator(dataset.width, &amp;quot;665px&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-width&amp;quot;), &amp;quot;width&amp;quot;, selfbox);&lt;br /&gt;
                    const maxHeight = cssLengthUnitValidator(dataset.maxHeight, &amp;quot;100vh&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-max-height&amp;quot;), &amp;quot;maxHeight&amp;quot;, selfbox);&lt;br /&gt;
                    const maxWidth = cssLengthUnitValidator(dataset.maxWidth, &amp;quot;100%&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-max-width&amp;quot;), &amp;quot;maxWidth&amp;quot;, selfbox);&lt;br /&gt;
                    const subtitle = !!(dataset.subtitle === &amp;quot;true&amp;quot;);&lt;br /&gt;
                    const t = parseInt(dataset.t);&lt;br /&gt;
                    const tIsInvalid = isNaN(t) || t &amp;lt;= 0;&lt;br /&gt;
                    const iframeContainer = selfbox.find(&amp;quot;.bilibili-iframe-container&amp;quot;);&lt;br /&gt;
                    const title_text = $(&amp;quot;&amp;lt;a/&amp;gt;&amp;quot;).attr(&amp;quot;rel&amp;quot;, &amp;quot;nofollow noreferrer noopener&amp;quot;).addClass(&amp;quot;external text&amp;quot;).attr({&lt;br /&gt;
                        href: `https://www.bilibili.com/video/${prefix.href}${id}?p=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`,&lt;br /&gt;
                        target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
                    }).prependTo(selfbox.find(&amp;quot;.bilibili-title&amp;quot;));&lt;br /&gt;
                    const iframe = $(&amp;quot;&amp;lt;iframe/&amp;gt;&amp;quot;).attr({&lt;br /&gt;
                        allow: &amp;quot;fullscreen&amp;quot;,&lt;br /&gt;
                        allowfullscreen: true,&lt;br /&gt;
                        frameborder: 0,&lt;br /&gt;
                        scrolling: &amp;quot;no&amp;quot;,&lt;br /&gt;
                        src: &amp;quot;&amp;quot;,&lt;br /&gt;
                        &amp;quot;class&amp;quot;: &amp;quot;bilibili-iframe&amp;quot;,&lt;br /&gt;
                    }).css({&lt;br /&gt;
                        width: width,&lt;br /&gt;
                        height: height,&lt;br /&gt;
                        &amp;quot;max-width&amp;quot;: maxWidth,&lt;br /&gt;
                        &amp;quot;max-height&amp;quot;: maxHeight,&lt;br /&gt;
                    });&lt;br /&gt;
                    if (!tIsInvalid) {&lt;br /&gt;
                        selfbox.removeAttr(&amp;quot;data-auto-expand&amp;quot;);&lt;br /&gt;
                    } else if (typeof dataset.t === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; dataset.t !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                        injectErrMsgBefore(selfbox, &amp;quot;attr&amp;quot;, &amp;quot;t&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                    const time = secondsParser(t);&lt;br /&gt;
                    title_text.text(`${(title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`)}【视频信息加载中……】`);&lt;br /&gt;
                    iframeContainer.css({&lt;br /&gt;
                        width: width,&lt;br /&gt;
                        height: height,&lt;br /&gt;
                        &amp;quot;max-width&amp;quot;: maxWidth,&lt;br /&gt;
                        &amp;quot;max-height&amp;quot;: maxHeight,&lt;br /&gt;
                    });&lt;br /&gt;
                    iframe.appendTo(iframeContainer);&lt;br /&gt;
                    const div = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;);&lt;br /&gt;
                    div.css({&lt;br /&gt;
                        position: &amp;quot;absolute&amp;quot;,&lt;br /&gt;
                        top: &amp;quot;0&amp;quot;,&lt;br /&gt;
                        left: &amp;quot;0&amp;quot;,&lt;br /&gt;
                        bottom: &amp;quot;0&amp;quot;,&lt;br /&gt;
                        right: &amp;quot;0&amp;quot;,&lt;br /&gt;
                        &amp;quot;z-index&amp;quot;: &amp;quot;99&amp;quot;,&lt;br /&gt;
                        display: &amp;quot;flex&amp;quot;,&lt;br /&gt;
                        &amp;quot;align-items&amp;quot;: &amp;quot;center&amp;quot;,&lt;br /&gt;
                        background: &amp;quot;rgba(255, 255, 255, .37)&amp;quot;,&lt;br /&gt;
                    });&lt;br /&gt;
                    const text = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;);&lt;br /&gt;
                    text.css({&lt;br /&gt;
                        &amp;quot;text-align&amp;quot;: &amp;quot;center&amp;quot;,&lt;br /&gt;
                        width: &amp;quot;100%&amp;quot;,&lt;br /&gt;
                    }).text(&amp;quot;正在加载中，若长时间空白则说明是网络问题……&amp;quot;);&lt;br /&gt;
                    div.append(text).appendTo(iframeContainer);&lt;br /&gt;
                    iframe.data({&lt;br /&gt;
                        placeholder: div,&lt;br /&gt;
                        displayFlag: true,&lt;br /&gt;
                    });&lt;br /&gt;
                    iframe[0].addEventListener(&amp;quot;load&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                        placeholderToggle(iframe);&lt;br /&gt;
                    });&lt;br /&gt;
                    $.ajax({&lt;br /&gt;
                        url: `https://api.bilibili.com/x/web-interface/view?${prefix.iframe}=${id}&amp;amp;jsonp=jsonp`,&lt;br /&gt;
                        type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
                        dataType: &amp;quot;jsonp&amp;quot;,&lt;br /&gt;
                        timeout: 10000,&lt;br /&gt;
                        success: ({ code, message, data }) =&amp;gt; {&lt;br /&gt;
                            if (code !== 0) {&lt;br /&gt;
                                title_text.text((title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                                iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                                lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                                console.info(&amp;quot;Widget:BilibiliVideo&amp;quot;, `${prefix.href}${id}`, code, message);&lt;br /&gt;
                                const errorType = getErrorType(code);&lt;br /&gt;
                                if (errorType) {&lt;br /&gt;
                                    ids[errorType][prefix.iframe].add(id);&lt;br /&gt;
                                }&lt;br /&gt;
                                return;&lt;br /&gt;
                            }&lt;br /&gt;
                            const list = data.pages;&lt;br /&gt;
                            let _page = 1;&lt;br /&gt;
                            const name = title || (data.title || prefix.href + id);&lt;br /&gt;
                            let index;&lt;br /&gt;
                            let length;&lt;br /&gt;
                            if (pagename) {&lt;br /&gt;
                                for (index = 0, length = list.length; index &amp;lt; length; index++) {&lt;br /&gt;
                                    if (list[index].part !== pagename) { continue; }&lt;br /&gt;
                                    _page = list[index].page;&lt;br /&gt;
                                    break;&lt;br /&gt;
                                }&lt;br /&gt;
                            } else { _page = page; }&lt;br /&gt;
                            index = _page - 1;&lt;br /&gt;
                            const href = title_text.attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
                            if (list[index] !== undefined &amp;amp;&amp;amp; list[index].cid !== undefined) {&lt;br /&gt;
                                iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base}${prefix.iframe}=${id}&amp;amp;cid=${list[index].cid}&amp;amp;page=${_page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                                title_text.attr(&amp;quot;href&amp;quot;, href.replace(new RegExp(`\\?p=${page}`, &amp;quot;g&amp;quot;), `?p=${_page}`));&lt;br /&gt;
                                title_text.text(`${name} [${_page}/${list.length}]${tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`}`);&lt;br /&gt;
                                if (subtitle) { title_text.append(`&amp;lt;br&amp;gt;（${_page}、${list[index].part}）`); }&lt;br /&gt;
                            } else {&lt;br /&gt;
                                title_text.text(name + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                                iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${_page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                            }&lt;br /&gt;
                            lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                        },&lt;br /&gt;
                        error: () =&amp;gt; {&lt;br /&gt;
                            title_text.text((title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                            iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                            lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                        },&lt;br /&gt;
                        complete: () =&amp;gt; {&lt;br /&gt;
                            if (selfbox.is(&amp;#039;[data-auto-expand=&amp;quot;true&amp;quot;]&amp;#039;)) {&lt;br /&gt;
                                selfbox.addClass(&amp;quot;onshow&amp;quot;);&lt;br /&gt;
                                iframeContainer.show();&lt;br /&gt;
                                toggleButton.text(&amp;quot;隐藏视频&amp;quot;);&lt;br /&gt;
                                selfbox.removeAttr(&amp;quot;style&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                            submit(ids);&lt;br /&gt;
                        },&lt;br /&gt;
                    });&lt;br /&gt;
                    //toggle&lt;br /&gt;
                    toggleButton.on(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                        selfbox.width(iframeContainer.outerWidth(true));&lt;br /&gt;
                        selfbox.toggleClass(&amp;quot;onshow&amp;quot;);&lt;br /&gt;
                        iframeContainer.toggle();&lt;br /&gt;
                        if (toggleButton.text() === &amp;quot;显示视频&amp;quot;) {&lt;br /&gt;
                            toggleButton.text(&amp;quot;隐藏视频&amp;quot;);&lt;br /&gt;
                            $(window).resize();&lt;br /&gt;
                        } else {&lt;br /&gt;
                            toggleButton.text(&amp;quot;显示视频&amp;quot;);&lt;br /&gt;
                            selfbox.removeAttr(&amp;quot;style&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    });&lt;br /&gt;
                    widescreenButton.on(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                        if (selfbox.is(&amp;quot;:not(.onshow)&amp;quot;)) { return; }&lt;br /&gt;
                        if (selfbox.is(&amp;quot;.widescreen&amp;quot;)) {&lt;br /&gt;
                            selfbox.removeClass(&amp;quot;widescreen&amp;quot;);&lt;br /&gt;
                            widescreenButton.text(&amp;quot;显示宽屏&amp;quot;);&lt;br /&gt;
                            recallWH(iframeContainer);&lt;br /&gt;
                            recallWH(iframe);&lt;br /&gt;
                            recallWH(selfbox);&lt;br /&gt;
                        } else {&lt;br /&gt;
                            selfbox.addClass(&amp;quot;widescreen&amp;quot;);&lt;br /&gt;
                            widescreenButton.text(&amp;quot;退出宽屏&amp;quot;);&lt;br /&gt;
                            rememberWH(selfbox);&lt;br /&gt;
                            selfbox.css(&amp;quot;width&amp;quot;, selfbox.parent().width() &amp;gt; Math.min(911, global_element.width()) ? &amp;quot;73%&amp;quot; : &amp;quot;100%&amp;quot;); //可以看见按钮的最小宽度 665 的 1/0.73 倍&lt;br /&gt;
                            setTureHeight(selfbox);&lt;br /&gt;
                            rememberWH(iframe);&lt;br /&gt;
                            rememberWH(iframeContainer);&lt;br /&gt;
                            setWH(iframe);&lt;br /&gt;
                            setWH(iframeContainer);&lt;br /&gt;
                            iframeContainer.height(selfbox.height() - title_text.parent().height());&lt;br /&gt;
                            setMaxHeight(selfbox, iframeContainer);&lt;br /&gt;
                        }&lt;br /&gt;
                    });&lt;br /&gt;
                });&lt;br /&gt;
            };&lt;br /&gt;
            $(run);&lt;br /&gt;
            mw.hook(&amp;quot;wikipage.content&amp;quot;).add(run);&lt;br /&gt;
            $(window).on(&amp;quot;load&amp;quot;, run);&lt;br /&gt;
            $(window).on(&amp;quot;resize&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                $(&amp;quot;.bilibili-video-container.onshow.widescreen&amp;quot;).each((_, ele) =&amp;gt; {&lt;br /&gt;
                    const selfbox = $(ele);&lt;br /&gt;
                    selfbox.css(&amp;quot;width&amp;quot;, selfbox.parent().width() &amp;gt; Math.min(911, global_element.width()) ? &amp;quot;73%&amp;quot; : &amp;quot;100%&amp;quot;);&lt;br /&gt;
                    setTureHeight(selfbox);&lt;br /&gt;
                    setMaxHeight(selfbox, selfbox.find(&amp;quot;.bilibili-iframe-container&amp;quot;));&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            /* eslint-disable */&lt;br /&gt;
            var msg = genErr(&amp;quot;error&amp;quot;, navigator.userAgent + &amp;quot; : &amp;quot; + e + &amp;quot; &amp;quot; + e.stack.split(&amp;quot;\n&amp;quot;)[1].trim());&lt;br /&gt;
            $(&amp;quot;.bilibili-video-container&amp;quot;).each(function (_, ele) {&lt;br /&gt;
                ele.outerHTML = msg;&lt;br /&gt;
            });&lt;br /&gt;
            /* eslint-enable */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;!--{/if}--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Amulet</name></author>
	</entry>
</feed>