学习通阻止暂停播放

学习通

// ==UserScript==
// @name         学习通阻止暂停播放
// @namespace    https://hognbin.xyz/
// @version      0.4
// @description  学习通
// @author       宏斌
// @match        https://mooc1.chaoxing.com/mycourse/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=chaoxing.com
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';
    var video;
    function stopPause() {
        video = document.querySelectorAll('iframe')[0].contentWindow.document.querySelectorAll('iframe')[0].contentWindow.document.querySelector('video');
        video.pause = () => {
            console.log('他想暂停播放');
        }
    }

    function handleMute() {
        video = document.querySelectorAll('iframe')[0].contentWindow.document.querySelectorAll('iframe')[0].contentWindow.document.querySelector('video');
        video.volume = 0;
    }

    const button = document.createElement('button');
    button.className = 'h_Bbutton';
    button.innerHTML = '阻止暂停播放';
    document.body.appendChild(button);
    Object.assign(button.style, {
        width: '120px',
    });
    const style = document.createElement('style');
    style.innerHTML = `
        .h_Bbutton{
            transition: all 0.3s linear;
            position: fixed;
            padding: 10px;
            border: none;
            background: linear-gradient(45deg, #0219f2, #c804ea);
            color: #fffae5;
            border-radius: 5px;
            bottom: 30px;
            left: 20px;
            box-shadow: 8px 4px 10px 3px #ccc;
            cursor: pointer;
            font-weight: bold;
        }
        .h_Bbutton:active{
            transform: translateY(2px);
        }
        .h_Bbutton:hover{
            opacity:0.8;
        }
        .h_Bbutton svg path{
            fill: #fffae5;
        }
        .bottom_text{
            position:fixed;
            bottom: 0;
            left: 0;
            background-color: #51f;
            color:#fffae5;
            padding: 3px 5px;
            font-size: 12px;
            border-radius: 3px;
        }
    `
    document.head.appendChild(style);
    button.onclick = verify(stopPause);
    /**
    * 添加静音按钮
    */

    const icon = `<svg t="1647347534277" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3042" width="32" height="32"><path d="M290.133333 921.6c-3.413333 0-10.24 0-13.653333-3.413333-17.066667-6.826667-23.893333-27.306667-17.066667-44.373334l307.2-699.733333c6.826667-17.066667 23.893333-30.72 40.96-37.546667 17.066667-6.826667 37.546667-3.413333 54.613334 6.826667C757.76 194.56 819.2 296.96 819.2 409.6v201.386667l34.133333 133.12c3.413333 10.24 0 20.48-6.826666 30.72-6.826667 3.413333-17.066667 10.24-27.306667 10.24h-139.946667c-17.066667 78.506667-85.333333 136.533333-167.253333 136.533333-30.72 0-58.026667-6.826667-85.333333-23.893333-17.066667-10.24-20.48-30.72-13.653334-47.786667 10.24-17.066667 30.72-20.48 47.786667-13.653333 17.066667 10.24 34.133333 13.653333 51.2 13.653333 47.786667 0 88.746667-34.133333 98.986667-81.92 6.826667-34.133333 34.133333-54.613333 68.266666-54.613333h95.573334l-23.893334-92.16V409.6c0-85.333333-47.786667-167.253333-122.88-208.213333l-307.2 699.733333c-3.413333 10.24-17.066667 20.48-30.72 20.48zM238.933333 757.76l34.133334-136.533333V409.6c0-119.466667 88.746667-221.866667 208.213333-235.52 17.066667-3.413333 30.72-20.48 30.72-40.96-3.413333-17.066667-20.48-30.72-40.96-30.72C320.853333 122.88 204.8 256 204.8 409.6v201.386667l-34.133333 133.12c-3.413333 17.066667 6.826667 37.546667 23.893333 40.96h6.826667c17.066667 0 34.133333-10.24 37.546666-27.306667z" fill="#3E2AD1" p-id="3043"></path></svg>`
    const muteButton = document.createElement('button');
    muteButton.className = 'h_Bbutton';
    muteButton.innerHTML = icon;
    muteButton.style['left'] = '150px';
    muteButton.style['padding'] = '3px';
    muteButton.style['background'] = 'linear-gradient(45deg, #f50404, #e2ec0a)';

    document.body.appendChild(muteButton);
    muteButton.onclick = verify(handleMute);

    const autoToggleButton = document.createElement('button');
    autoToggleButton.className = 'h_Bbutton';
    autoToggleButton.innerHTML = '自动切换下集';
    Object.assign(autoToggleButton.style, {
        bottom: '80px'
    })
    autoToggleButton.onclick = verify(autoToggleNextVideo);
    document.body.appendChild(autoToggleButton);

    function autoToggleNextVideo() {
        if (!video) {
            video = document.querySelectorAll('iframe')[0].contentWindow.document.querySelectorAll('iframe')[0].contentWindow.document.querySelector('video');
        }
        const curr = document.querySelectorAll('h4.currents')[0]
        if (!curr) return console.warn('获取当前活跃item失败');
        const nextA = curr.parentElement.nextElementSibling.querySelector('a');
        if (!nextA) return;
        video.addEventListener('ended', () => {
            nextA.click();
        });
        autoToggleButton.style.display = 'none';

        const nextVideoText = document.createElement('span');
        nextVideoText.className = 'bottom_text';
        document.body.appendChild(nextVideoText);

        const r = () => {
            nextVideoText.innerText = `下集:${nextA.children[0].innerText}`;
            setTimeout(r, 5000);
        }
        r();

    }

    function verify(callback) {
        return () => {
            try {
                callback();
            } catch (e) {
                console.error('出错!', e);
                alert('确保已经点开视频');
            }
        }
    }

})();