Greasy Fork

视频进度条拉到尾端

操作视频进度条,将其移动到最后,用于绕过基于视频进度的限制。

目前为 2024-08-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         视频进度条拉到尾端
// @namespace    none
// @version      1.1
// @description  操作视频进度条,将其移动到最后,用于绕过基于视频进度的限制。
// @author       AMin
// @match        *://*/*
// @grant        none
// @license      Proprietary
// @run-at       document-end
// ==/UserScript==

(function () {
    'use strict';

    function manipulateProgressBar() {
        const videoElement = document.querySelector("video");

        if (videoElement) {
            const currentPos = videoElement.currentTime;
            videoElement.currentTime = videoElement.duration - 2;

            setTimeout(() => {
                videoElement.currentTime = currentPos;
            }, 900);
        }
    }

    function createButton() {
        const triggerButton = document.createElement('button');
        triggerButton.textContent = '视频置为最后';
        Object.assign(triggerButton.style, {
            position: 'absolute',
            top: '10px',
            left: '10px',
            backgroundColor: '#444',
            color: '#fff',
            border: 'none',
            padding: '8px 16px',
            cursor: 'pointer',
            opacity: '0.85',
            zIndex: '10000'
        });

        triggerButton.addEventListener('click', manipulateProgressBar);
        document.body.appendChild(triggerButton);
    }

    function checkForVideoAndCreateButton() {
        if (document.querySelector("video")) {
            createButton();
        } else {
            // Check periodically if the video element appears later
            const observer = new MutationObserver((mutations) => {
                for (let mutation of mutations) {
                    if (mutation.addedNodes.length) {
                        for (let node of mutation.addedNodes) {
                            if (node.tagName === 'VIDEO' || node.querySelector('video')) {
                                createButton();
                                observer.disconnect();
                                return;
                            }
                        }
                    }
                }
            });

            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        }
    }

    checkForVideoAndCreateButton();
})();