Greasy Fork is available in English.
支持所有H5视频的增强脚本,通用网页全屏|倍速调节;B站(含直播) / 腾讯视频 / 优酷 / 爱奇艺 / 芒果TV / AcFun 默认自动网页全屏,其他网站可手动开启;自动网页全屏 + 记忆倍速 + 下集切换,减少鼠标操作,让追剧更省心、更沉浸;支持视频旋转、截图、镜像翻转、缩放与移动、记忆播放进度等功能
当前为
参考设置:https://pic1.imgdb.cn/item/696662c00e6bc0c5db9822b5.png
| 快捷键 | 说明 | 快捷键 | 说明 |
|---|---|---|---|
| Enter | 全屏 | P | 网页全屏 |
| N | 切换下集 | R | 旋转 90° |
| M | 静音切换 | D | 弹幕显/隐 |
| K / L | 上下帧 | Shift + R | 水平镜像 |
| Ctrl + Z | 复位缩移 | Shift + A | 启/禁自动下集 |
| Ctrl + Alt + S | 截图 | Alt + ➕ / ➖ | 缩放 |
| A / S 或 ➕ / ➖ | ±倍速 | Alt + ◀️🔼 | 移动 |
| Ctrl 1️⃣~5️⃣ | 预设倍速 | 1️⃣~9️⃣ | 1️⃣ - 9️⃣ 倍速 |
| 数字 0️⃣ | 快进 30 秒 | ◀️▶️ | 快退/进 (默禁) |
| 空格 | 播放/暂停 (默禁) |
设置路径:「更多设置」→「全屏」→「此站 (网页)全屏视频容器」
该功能允许您为当前网站设置自定义 (网页)全屏视频容器,解决 (网页)全屏时可能出现的各种适配问题,例如:
| 网站 | CSS 选择器 | 效果说明 |
|---|---|---|
| 抖音 | #slidelist > div |
全屏后能切换视频 |
| 吐槽弹幕网 | #m_dplayer |
显示底部控制栏 |
| 虎牙直播 | #videoContainer |
显示底部控制栏 |
解决的问题:
示例: 在 YouTube Shorts、新版贴吧 未修改阈值时切换网页全屏异常,修改阈值为 10 后可正常切换。
示例: 在 www.reddit.com 滚动加载内容后,DOM 元素过多,导致切换(网页)全屏存在明显延迟(iframe 无法解决)
将鼠标移至视频左右两侧边缘区域,当鼠标光标发生变化时 ,点击即可切换网页全屏状态。
解决的问题:
iframe 视频网页全屏的干扰(www.reddit.com)脚本默认只对 @match 配置的网站自动网页全屏,若需对其他的网站启用自动网页全屏,可按以下方式配置:
(1). 对所有网站生效
将脚本中的:
// @note *://*/*
修改为:
// @match *://*/*
推荐在浏览器插件的脚本设置面板中完成用户匹配规则的配置;后续脚本更新时,可避免重复修改。
参考设置:https://pic1.imgdb.cn/item/696662c00e6bc0c5db9822b5.png
(2). 只针对单个网站生效(以咕咕番为例)
使用 @include 指定单个网站:
// @include *://www.gugu3.com/*
(3). 对嵌套框架页生效(如 E 站弹幕网)
若视频在 iframe 框架中播放,需同时匹配主页面和框架页的域名:
// @include *://www.ezdmw.site/Index/video/*
// @include *://player.ezdmw.com/danmuku/*
配置完成后,刷新视频页面并等待视频完全加载,再在脚本菜单中点击「此站启用自动网页全屏」。设置成功后,视频开始播放时将自动进入网页全屏。
⚠️ 注意:配置只针对单个网站时须用
@include,而非@match(@match触发的是网站自带的图标,如果配置成@match,还需要在class Site中定义相关图标的CSS选择器)。如要对
PPTV聚力视频自动网页全屏,配置成:// @match *://v.pptv.com/show/*则需在脚本的
class Site中,新增以下配置:// full-全屏,webFull-网页全屏,danmaku-弹幕开关,next-下集 static selectors = { "v.pptv.com": { full: ".w-zoom-container div", webFull: ".w-expand-container div", danmaku: ".w-barrage div", next: ".w-next" }, };反之亦然!!!
「此站启用自动网页全屏」后,将对目标域名下的所有页面生效(例如 YouTube 的搜索结果、短视频等场景)。若需排除不需要自动的页面,可按以下步骤操作:
https://www.youtube.com/shorts 即可排除短视频页)⚠️ 注意:该功能不支持模糊匹配,仅采用「前缀匹配」逻辑(即仅匹配以输入网址开头的页面)
可在切换全屏、网页全屏、退出全屏时,执行对应的自定义代码逻辑,比如调整页面布局、显示 / 隐藏控件等。
代码存放路径:「更多设置」→「全屏」→「此站 (网页)全屏切换 事件代码」
事件类型(type):isFull、isWFull、default
if (type === "isFull") {
console.log("进入全屏模式!");
} else if (type === "isWFull") {
console.log("进入网页全屏模式!");
} else {
console.log("退出(网页)全屏模式!");
}
B 站视频播放结束后自动退出全屏状态且点击「取消连播」按钮,避免自动播放下一个视频。
如不需此功能,请在脚本中注释或删除掉以下代码:
this.autoExitFullscreen();
对默认 @match 匹配网站,脚本直接使用站点自带的下一集按钮进行切换。
同时为其他第三方视频站点提供了通用性较强的下集切换功能实现,让你在全网不同站点都能享受一致、顺畅的下一集体验。
功能默认处于禁用状态,需手动在脚本菜单中开启以激活使用。
设置路径:「更多设置」→「控制」→「启用自动切换至下集」或按 Shift A 快捷键。
自定义选项:
限制:时长小于 5 分钟的视频不会触发自动切换下集
若遇到网站无法成功切换下集,或跳转至错误地址的情况,可通过手动适配的方式,尝试解决切换失败问题。
Ctrl + Alt 键,用鼠标点击当前播放集数的位置(如播放页显示的 “第 1 集”)。获取集数失败,手动编辑文本框中的选择器代码,修改后再次点击「验证」,成功后保存。Ctrl + Alt 键,点击剧集列表(如侧边栏或底部列表)中的任意一集(如 “第 2 集”)。获取集数失败 或验证时显示的集数列表(如数量)有误,手动编辑选择器代码,修改后再次点击「验证」,直至显示正确集数后保存。前面歩骤操作完成后,按键盘 N 键,测试是否能成功正确的切换至下一集。
在该网站上默认拾取到的元素选择器,验证时不能获取到当前播放集数。
原因是:当鼠标移入目标元素时,会动态添加临时 class;而当元素失去焦点后,该 class 会自动移除。由于默认拾取的选择器包含此动态 class,导致无法获取当前播放集数。
解决方法:手动删除动态添加的 class,即可成功匹配目标元素并获取当前播放集数。
在该网站上当前播放的集数在剧集列表中无明确标识(如高亮、特殊样式或独有 class),导致无法通过列表元素直接区分正在播放的集数是哪一个。
虽列表无法识别,但页面顶部标题栏中存在包含当前播放集数的明确文本,第一步拾取,可选取标题栏的集数元素定位当前播放集数。
在该网站上第二步拾取元素并点击「验证」时,提示的集数列表与页面实际显示不一致,通过调整元素选择器的层级结构后,最终成功获取正确数据。
脚本已针对以下导航站收录的影视动漫类网站,完成下集切换功能的通用性测试:
/**
* 获取跳转目标集数的元素
* @param isPrev 是否跳转上一集;true = 上一集,false = 下一集
* @returns 要点击的元素
*/
GM_E9X_FS.getJumpTargetEpisode(isPrev: boolean): HTMLElement;
若手动适配仍无法正常切换下一集,可通过重写获取下集跳转元素的逻辑,自定义匹配规则,解决脚本默认代码逻辑的切换限制,实现精准、稳定的下一集跳转。
代码存放路径:「更多设置」→「高级」→「此站 load 事件代码」
默认只能本章节内切换,重写逻辑使其不限于本章节切换
GM_E9X_FS.getJumpTargetEpisode = function (isPrev) {
const all = Tools.querys(".sec-li a"); // 章节视频列表
const currIndex = all.findIndex((el) => el.href.includes(location.pathname)); // 当前播放的
return isPrev ? all[currIndex - 1] : all[currIndex + 1]; // 要播放的下一个视频
};
// 直接获取“下一节”元素
GM_E9X_FS.getJumpTargetEpisode = () => Tools.query(".icon-next-fill");
默认处于禁用状态,需手动开启后使用。
设置路径:「更多设置」→「控制」→「启用 空格◀️▶️ 控制」
自定义选项:「更多设置」→「参数」→「快进/退秒数」
解决的问题:
iframe 中无需手动聚焦也能操控视频默认启用:视频标签页切换到后台(不可见)时自动暂停,切回时自动播放。
支持自定义常用的播放倍速,通过 Ctrl + 数字键【1~5】 一键设置,提升效率。
设置路径:「参数」→「常用倍速」(多值用英文逗号分隔,例:1.15,1.45,1.75)
Ctrl + 1 至 Ctrl + 5 分别对应预设倍速列表的第 1 至第 5 项
1.15,1.45,1.75 时,Ctrl + 1 对应 1.15 倍、Ctrl + 2 对应 1.45 倍、Ctrl + 3 对应 1.75 倍默认在全屏模式右上角显示:系统时间、视频剩余时长、进度百分比。
自定义选项:
限制:≤30秒视频不显示剩余时长和进度百分比
可访问的值:type, video, unsafeWindow, Tools, GM_E9X_FS
代码存放路径:「更多设置」→「高级」→「此站 load 事件代码」
注意: 自定义加载事件逻辑,需要刷新页面才能看到效果!!!
事件类型(type):DOMContentLoaded、load
示例一:https://www.bilibili.com/
// if(type === "DOMContentLoaded") console.log('DOM 树已构建完成,可以操作 DOM 元素了!');
// if(type === "load") console.log('页面资源已加载完!');
// 解决B站未登录时,播放一分钟左右弹出登录窗的问题
Tools.waitFor(() => unsafeWindow.__BiliUser__ && !unsafeWindow.__BiliUser__.isLogin, { interval: 300 }).then(() => {
unsafeWindow.__BiliUser__.cache.data.isLogin = true;
unsafeWindow.__BiliUser__.cache.data.mid = Date.now();
});
示例二:https://www.dadaqu.cc/、https://www.jddzx.cc/、https://jnvod.cc/
// 需要点击才会加载视频资源
if(type === "load") Tools.query("body > #start")?.click();
代码存放路径:「更多设置」→「高级」→「此站 video 事件代码」
事件类型(type):loadstart、loadedmetadata、loadeddata、timeupdate、ratechange、canplay、playing、ended
示例一:https://www.bilibili.com/
// B站已登录时,清晰度切换为 1080P,Tools.isExecuted() 用于标记只执行一次
if (type !== "playing" || Tools.isExecuted("setBiliQuality")) return;
Tools.waitFor(() => unsafeWindow.player && document.cookie.includes("DedeUserID"), { interval: 300 }).then(() => {
const current = unsafeWindow.player.getQuality().realQ;
const list = unsafeWindow.player.getSupportedQualityList();
const target = list.find((quality) => quality === 80) ?? list[0];
if (current !== target) unsafeWindow.player.requestQuality(target);
});
也可以放到页面
load事件中处理,这里只是用于举例。
示例二:https://live.bilibili.com/
// B站直播切换最高清晰度
if (type !== "playing" || Tools.isExecuted("setBiliLiveQuality")) return;
Tools.waitFor(() => unsafeWindow.top?.livePlayer, { interval: 500 }).then(() => {
const info = unsafeWindow.top?.livePlayer?.getPlayerInfo();
const qn = info?.qualityCandidates?.[0]?.qn ?? "10000";
if (info?.quality !== qn) unsafeWindow.top?.livePlayer?.switchQuality(qn);
});