Greasy Fork

来自缓存

Greasy Fork is available in English.

巴哈姆特动画广告跳过助手

自动点击年龄确认和跳过广告按钮,暂停时隐藏界面元素以便截屏,鼠标悬停进度条区域显示控制器

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         巴哈姆特动画广告跳过助手
// @namespace    http://greasyfork.icu/zh-CN/scripts/531816
// @version      0.6
// @description  自动点击年龄确认和跳过广告按钮,暂停时隐藏界面元素以便截屏,鼠标悬停进度条区域显示控制器
// @author       YourName
// @match        https://ani.gamer.com.tw/animeVideo.php?sn=*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 1. 处理年龄确认按钮
    function clickAdultConfirm() {
        const adultBtn = document.getElementById('adult');
        if (adultBtn) {
            console.log('找到年龄确认按钮,自动点击');
            adultBtn.click();
            setTimeout(monitorSkipButton, 1000);
        } else {
            setTimeout(clickAdultConfirm, 500);
        }
    }

    // 2. 监控跳过广告按钮
    function monitorSkipButton() {
        const skipButton = document.getElementById('adSkipButton');
        if (!skipButton) {
            setTimeout(monitorSkipButton, 500);
            return;
        }

        const observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                if (mutation.attributeName === 'class') {
                    const currentClass = skipButton.getAttribute('class');
                    if (currentClass.includes('enable')) {
                        console.log('检测到可跳过的广告按钮,自动点击');
                        skipButton.click();
                        observer.disconnect();
                    }
                }
            });
        });

        const config = { attributes: true, attributeFilter: ['class'] };
        observer.observe(skipButton, config);

        if (skipButton.classList.contains('enable')) {
            console.log('初始检查发现可跳过的广告按钮,自动点击');
            skipButton.click();
            observer.disconnect();
        }
    }

    // 3. 监控页面变化以捕获动态加载的年龄确认界面
    function observePage() {
        const observer = new MutationObserver(function(mutations) {
            const adultBtn = document.getElementById('adult');
            if (adultBtn) {
                console.log('动态检测到年龄确认按钮,触发点击');
                clickAdultConfirm();
            }
        });

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

    // 4. 暂停时隐藏界面元素,播放时恢复,鼠标悬停进度条区域显示控制器
    function setupPauseHide() {
        const video = document.querySelector('video');
        if (!video) {
            setTimeout(setupPauseHide, 500);
            return;
        }

        // 目标元素
        const elementsToHide = [
            '.vjs-big-play-button', // 右下角播放按钮
            '.top-tool-bar',        // 顶部阴影工具栏
            '.control-bar-mask'     // 底部阴影遮罩
        ];
        const controlBarSelector = '.vjs-control-bar'; // 底部控制条(进度条等)

        // 保存原始 display 状态
        const originalDisplay = new Map();

        // 隐藏元素(不包括控制条)
        function hideElements() {
            elementsToHide.forEach(selector => {
                const element = document.querySelector(selector);
                if (element) {
                    if (!originalDisplay.has(selector)) {
                        originalDisplay.set(selector, element.style.display || 'block');
                    }
                    element.style.display = 'none';
                    console.log(`隐藏元素: ${selector}`);
                }
            });
        }

        // 隐藏控制条
        function hideControlBar() {
            const controlBar = document.querySelector(controlBarSelector);
            if (controlBar) {
                if (!originalDisplay.has(controlBarSelector)) {
                    originalDisplay.set(controlBarSelector, controlBar.style.display || 'block');
                }
                controlBar.style.display = 'none';
                console.log(`隐藏控制条: ${controlBarSelector}`);
            }
        }

        // 显示控制条
        function showControlBar() {
            const controlBar = document.querySelector(controlBarSelector);
            if (controlBar) {
                controlBar.style.display = originalDisplay.get(controlBarSelector) || 'block';
                console.log(`显示控制条: ${controlBarSelector}`);
            }
        }

        // 恢复所有元素
        function showElements() {
            elementsToHide.forEach(selector => {
                const element = document.querySelector(selector);
                if (element) {
                    element.style.display = originalDisplay.get(selector) || 'block';
                    console.log(`恢复元素: ${selector}`);
                }
            });
            showControlBar(); // 确保控制条也恢复
        }

        // 暂停时隐藏元素的逻辑
        function onPause() {
            hideElements();
            hideControlBar();
            setupControlBarHover(); // 设置鼠标悬停逻辑
        }

        // 设置鼠标悬停显示控制条
        function setupControlBarHover() {
            const videoContainer = document.querySelector('.vjs-control-bar')?.parentElement || document.querySelector('video').parentElement;
            if (!videoContainer) {
                console.log('未找到视频容器,重试');
                setTimeout(setupControlBarHover, 500);
                return;
            }

            // 鼠标进入时显示控制条
            videoContainer.addEventListener('mouseenter', function handler(e) {
                if (video.paused) {
                    showControlBar();
                }
            });

            // 鼠标离开时隐藏控制条
            videoContainer.addEventListener('mouseleave', function handler(e) {
                if (video.paused) {
                    hideControlBar();
                }
            });
        }

        // 监听视频暂停和播放事件
        video.addEventListener('pause', onPause);
        video.addEventListener('play', showElements);

        // 初始检查:如果视频已经暂停
        if (video.paused) {
            onPause();
        }
    }

    // 页面加载后执行
    if (document.readyState === 'complete' || document.readyState === 'interactive') {
        setTimeout(clickAdultConfirm, 1000);
        observePage();
        setTimeout(setupPauseHide, 1000);
    } else {
        window.addEventListener('DOMContentLoaded', function() {
            setTimeout(clickAdultConfirm, 1000);
            observePage();
            setTimeout(setupPauseHide, 1000);
        });
    }
})();