使用 UserScript 给 438kan 添加网页全屏支持
前言
最近一直在 438kan 上追剧,但是 438kan 自带的播放器嵌套在一个 iframe 中,不能使用网页全屏功能。而使用全屏播放视频时遇到要回复QQ、微信消息的情况则需要不断在全屏/非全屏之间切换,非常麻烦。所以决定研究研究,实现 438kan 的网页全屏功能。
初次分析
我们首先在浏览器中打开播放器地址 http://438kan.com/static/player/dplayer.html,右键-查看网页源代码,找到了其中的关键代码
1 |
|
通过 parent.MacPlayer.PlayUrl
这句我们可以发现,视频播放地址是在 iframe 外加载的,根本没必要使用 iframe ,可以把 iframe 整个替换掉。这里我们直接用这个 iframe 的父级div MacPlayer
作为播放器的容器,通过 UserScript
中的 @require
加载 dplayer
及其依赖 hls
,直接加载 MacPlayer.PlayUrl
这个地址的视频
1 |
|
这里需要注意一个问题,iframe 中播放器地址是被 http://438kan.com/static/player/dplayer.js 这个 js 加载的,为了防止不必要的资源加载,我们使用 uBlock Origin
或 Adblock Plus
将其拦截。
第二次分析
脚本写完后,复制到 Violentmonkey 中,刷新网页。音乐声响起,但是视频没有出现。通过 F12 我们可以发现视频已经加载出来了,但是高度异常
继续分析我们发现 MacPlayer
这个元素的 padding-bottom
居然有 500
多,把视频高度都给挤没了。
既然知道问题出在哪里了,解决方案也就有了,那就是设置 padding-bottom
为 0px
。现在我们就有两种实现方案:UserCSS
和 UserScript
。这里我们继续使用 UserScript
。UserScript
中添加自定义样式的方法是 GM_addStyle
。
1 |
|
第三次分析
增加自定义样式后,视频出来了,网页全屏功能也正常了。但还有一点点小瑕疵,就是导航栏悬浮在播放器上方,遮挡了一部分视频。这个就简单了,只要把播放器 z-index
值设置的大于导航栏的值就可以了,完整代码如下:
1 |
|
刷新视频,网页全屏一切正常。这下舒服了。