您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Skip the intro and outro of Bilibili videos
// ==UserScript== // @name B站/Bilibili片头片尾跳过 // @namespace http://tampermonkey.net/ // @version 1.2 // @description Skip the intro and outro of Bilibili videos // @author Scabish // @match https://www.bilibili.com/bangumi/* // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @license MIT // ==/UserScript== (function() { 'use strict'; // 初始化配置 let config = { skipIntro: GM_getValue('skipIntro', false), introDuration: GM_getValue('introDuration', 0), skipOutro: GM_getValue('skipOutro', false), outroDuration: GM_getValue('outroDuration', 0) }; // 注册菜单命令以修改配置 GM_registerMenuCommand("Configure Skipper", function() { const introDuration = prompt("输入要跳过的片头时长 (以秒为单位,0表示关闭该功能):", config.introDuration); const outroDuration = prompt("输入要跳过的片尾时长 (以秒为单位,0表示关闭该功能):", config.outroDuration); const skipIntro = introDuration !== null && introDuration !== "0"; const skipOutro = outroDuration !== null && outroDuration !== "0"; // 更新配置 config = { skipIntro: skipIntro, introDuration: parseInt(introDuration, 10) || 0, skipOutro: skipOutro, outroDuration: parseInt(outroDuration, 10) || 0 }; // 保存配置 GM_setValue('skipIntro', skipIntro); GM_setValue('introDuration', config.introDuration); GM_setValue('skipOutro', skipOutro); GM_setValue('outroDuration', config.outroDuration); }); // 检查视频播放状态 function checkVideoStatus() { // 获取视频元素 const videoElement = document.querySelector('video'); // 检查视频元素是否存在 if (!videoElement) { return; } // 获取视频的当前播放时间 const currentTime = videoElement.currentTime; let isPaused = true; // 检查视频是否已经开始播放 if (currentTime > 0) { // 视频已开始播放 isPaused = false; } else { // 视频暂停 isPaused = true; } // 如果视频正在播放且已启用跳过片头,且当前时间小于片头时长,则跳转 if (!isPaused && config.skipIntro && currentTime < config.introDuration) { skipIntro(); } // 如果启用跳过片尾,则检查是否需要跳转 if (config.skipOutro) { skipOutro(); } } // 跳过片头 function skipIntro() { const video = document.querySelector('video'); if (video && video.readyState > 0) { video.currentTime = config.introDuration; } } // 跳过片尾 function skipOutro() { const video = document.querySelector('video'); if (video && video.readyState > 0) { const remainingTime = video.duration - video.currentTime; if (remainingTime < config.outroDuration) { const nextButton = document.querySelector('.bpx-player-ctrl-btn.bpx-player-ctrl-next'); if (nextButton) { nextButton.click(); } } } } // 设置定时器检查视频状态 setInterval(checkVideoStatus, 5000); })();