一、用 <iframe> 在 HTML 中插入B站视频
最近在写博客的时候遇到了要在文章中插入视频的需求,由于 <video>
标签要从本地引用资源,因此选择了用
<iframe>
标签接入B站视频的播放器的方法。
1、获取嵌入代码:将鼠标悬停在PC网页端B站视频播放器下方的「分享」按钮上,点击弹出元素中的「嵌入代码」获取。
2、嵌入代码结构:
<iframe src="//player.bilibili.com/player.html?aid=NNNNNNNN6&bvid=BVXXXXXXXX&cid=NNNNNNNNNN&page=1&autoplay=1&danmaku=1&as_wide=1&t=60" height="1920" width="1080" name="player" allowfullscreen="true" sandebox=""></iframe>
src 参数:(写在 src 引号中链接最后,各项之间用「&」连接)
「aid」article
id,即视频的 av 号;B站在 2020.03 把 av 号根据一定的算法转换成了 bv 号,所以如果填了 bvid ,那么不填 aid 也可。
「bvid」bilibili video id,即视频的 bv 号。
「cid」chat id,即视频对应弹幕池的编号,如果填了 aid / bvid,那么不填也可。
「page」视频集数(默认为1),即分集视频中的第几集(起始下标为1)。
「autoplay」设定视频是否自动播放,1为自动播放、0为禁止自动播放,默认为1;注意:开启自动播放会默认伴随静音开播。
「danmaku」是否开启弹幕,1为开启、0为关闭,默认为1。
「as_wide」是否宽屏,1为宽屏、0为小屏,默认为1。
「t」<iframe>加载完毕时自动跳转至该秒数并自动播放,单位s,默认为0。
「high_quality」视频清晰度,1为高清、0为最低清晰度,默认为0;注意:由于<iframe>默认处于未登陆状态,且B站播放器在未登录状态下只允许视频
360p 播放,所以该参数约等于没用。
iframe 参数:(写在 iframe 标签中,各项之间用空格隔开)
「src」规定 <iframe> 中显示文档的URL。
「height」规定 <iframe> 宽度,单位px。
「width」规定 <iframe> 高度,单位px。
「name」规定 <iframe> 名称。
「allowfullscreen」规定 <iframe> 是否允许全屏播放。
「seamless」令 <iframe> 看起来就像是父文档的一部分,是一个 Boolean 值;注意:只有
Chrome 和 Safari
6 支持 <iframe> 标签的 seamless 属性。
「sandbox」对 <iframe> 的额外限制,用以提升iFrame的安全性;注意:sandbox
值既可以是用空格分隔的一系列指定的字符串,也可以是一个空字符串(将会启用所有的限制)。
其他属性,如「align」、「scrolling」等,HTML5 不支持,建议使用 CSS
代替(建议所有样式有关的属性都尽量使用 CSS 代替)。
sandbox 参数:(写在 sandbox 属性的引号中,各项之间用空格隔开)
「allow-same-origin」允许将内容作为普通源来对待,否则嵌入的内容将被视为一个独立的源(跨域)。
「allow-top-navigation」允许嵌入的网页对顶级窗口进行导航。
「allow-forms」允许提交表单。
「allow-scripts」允许脚本执行。
「allow-modals」允许弹出提示框。
「allow-popups」允许嵌入的网页使用 window.open();
方法弹出窗口。
「allow-popups-to-escape-sandbox」允许嵌入的网页使用
window.open();
方法弹出窗口,且弹出的窗口不受沙箱的限制。
「allow-downloads-without-user-activation」允许在没有用户激活的情况下,嵌入的网页启动下载。
「allow-orientation-lock」允许嵌入的网页用脚本锁定屏幕的方向。
「(空字符串)」打开以上所有限制。
注意:同时开启「allow-scripts」和「allow-same-origin」将使得嵌入的网页可以通过脚本改变或删除 sandbox 属性。
二、更简洁的播放器
方法一:设置
sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"
即可阻止通过
<iframe> 跳转至B站(原理不太懂,但确实有效)。
方法二:改用移动网页端B站视频播放器的嵌入代码。
<iframe
src="//www.bilibili.com/blackboard/html5mobileplayer.html?bvid=BVXXXXXXXX&page=1&as_wide=1"
allowfullscreen="allowfullscreen"></iframe>
与PC网页端的不同:
1、播放器路径由「//player.bilibili.com/player.html」变为「//www.bilibili.com/blackboard/html5mobileplayer.html」
2、界面十分简洁,只有播放/暂停、进度条、弹幕开关、静音、全屏功能,没有跳转功能即不会触发发点击跳转。
3、其他参数与上文基本一致,但「autoplay」无论值是什么都会开启自动播放,不赋值会报错,只有不写这个属性才能禁止自动播放。
三、<iframe> 大小自适应
因为要维持 <iframe> 16:9
的宽高比,因此只需要令 <iframe>
的宽度随窗口宽度变化,再令其高度随宽度按比例变化即可。
<script>
const setIframeHeight = () => {
document.getElementById('iframe').style.width = window.innerWidth + 'px';
document.getElementById('iframe').style.height = (9 * document.getElementById('iframe').offsetWidth / 16) + 'px';
}
setIframeHeight();
addEventListener('resize', setIframeHeight);
</script>