Greasy Fork is available in English.

B站看电影自动跳转片尾

该脚本用于在B站观看热心UP上传的分段电影视频,因为B站目前的反制措施,很多分段视频不得不在视频结尾的地方添加无关的视频拼凑时长,该脚本可以根据需要跳过该时间,感谢RyananChen提供的跳转思路

// ==UserScript==
// @name         B站看电影自动跳转片尾
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  该脚本用于在B站观看热心UP上传的分段电影视频,因为B站目前的反制措施,很多分段视频不得不在视频结尾的地方添加无关的视频拼凑时长,该脚本可以根据需要跳过该时间,感谢RyananChen提供的跳转思路
// @author       panndora
// @match        https://www.bilibili.com/video/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    // 从localStorage读取开关状态和跳过时间,如果没有则设置默认值
    let isActive = localStorage.getItem('isActive') === 'true';
    let skipTimeSeconds = parseInt(localStorage.getItem('skipTimeSeconds'), 10) || 90; // 默认跳过时间设置为90秒

    // 创建开关按钮
    let toggleButton = document.createElement('button');
    toggleButton.innerText = isActive ? '关' : '开';
    toggleButton.style.position = 'fixed';
    toggleButton.style.bottom = '20px';
    toggleButton.style.right = '20px';
    toggleButton.style.zIndex = '9999';
    document.body.appendChild(toggleButton);

    // 切换开关状态
    toggleButton.onclick = function() {
        isActive = !isActive;
        localStorage.setItem('isActive', isActive); // 保存开关状态到localStorage
        toggleButton.innerText = isActive ? '关' : '开';
        console.log("用户切换了状态");
    };

    // 创建输入框
    let inputSeconds = document.createElement('input');
    inputSeconds.type = 'number';
    inputSeconds.min = '1';
    inputSeconds.placeholder = '输入需要跳过的秒数';
    inputSeconds.style.position = 'fixed';
    inputSeconds.style.bottom = '20px'; // 与开关按钮等高
    inputSeconds.style.right = '40px'; // 初始位置在开关按钮旁边(假设按钮宽度为100px)
    inputSeconds.style.zIndex = '9999';

    // 为输入框添加样式,使其与按钮等高
    let buttonHeight = window.getComputedStyle(toggleButton).height;
    inputSeconds.style.top = `-${buttonHeight}}px`; // 根据按钮的高度设置input的top值,使其看起来等高
    inputSeconds.style.width = '80px'; // 可以调整输入框的宽度

    document.body.appendChild(inputSeconds);

    // 处理输入框的回车键事件
    inputSeconds.onkeypress = function(e) {
        if (e.key === 'Enter') {
            skipTimeSeconds = parseInt(inputSeconds.value, 10);
            if (!isNaN(skipTimeSeconds)) { // 确保输入的是数字
                localStorage.setItem('skipTimeSeconds', skipTimeSeconds); // 保存跳过时间到localStorage
                // 这里可以添加代码来根据新的跳过时间执行操作
                // ...
                console.log("用户设置了当前跳过时间为",skipTimeSeconds);
            }
        }
    };

    // 这里需要根据实际页面元素进行调整
    const videoElement = document.querySelector("#bilibili-player video"); // 你的视频元素选择器
    // 其他脚本代码,例如检查视频时间并跳转...
    function checkAndSkipVideo() {
        if (!isActive) return;
        if (videoElement) {
            console.log("定时器ID:", intervalId);
            console.log("用户设定的跳过秒数:", skipTimeSeconds);
            // 如果视频当前时间大于 视频总时间减去用户设定时间, 将当前播放时间设置为视频总时间实现跳过视频
            if (videoElement.currentTime > (videoElement.duration - skipTimeSeconds)){
                videoElement.currentTime = videoElement.duration;
                console.log("当前已经执行过跳过命令了.");
            }
        }
    }
    // 每1秒检查一次
    let intervalId = setInterval(checkAndSkipVideo, 1000);
    console.log("脚本加载完成");
})();