// ==UserScript== // @name 国家开放大学课程视频后台播放 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 提升学习效率 // @author TurbMZ // @license MIT // @match http://moodle.syxy.ouchn.cn/mod/url/view.php* // @icon https://www.google.com/s2/favicons?sz=64&domain=ouchn.cn // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; //let status = localStorage.getItem('_my_tamermonkey_status_') window._my_tamermonkey_status_ = false; //status || let _my_tamermonkey_speed_ = 1; const speedMap = [ 1, 1.5, 2, 4 ] const container = document.getElementById('page-content') let videoDom = document.getElementsByTagName('VIDEO')[0]; let tryTimes = 0; console.log('插件控制状态',status,container) const init = function() { container.style.position = 'relative'; let btnText = window._my_tamermonkey_status_?'停用后台播放':'启用后台播放' let controlBox = document.createElement('DIV'); let controlBtn = document.createElement('SPAN'); let speedBtn = document.createElement('SPAN'); let jopeToEndBtn = document.createElement('SPAN') // 控制开关 const controlHandler = function(e) { window._my_tamermonkey_status_ = !window._my_tamermonkey_status_; // localStorage.setItem('_my_tamermonkey_status_',window._my_tamermonkey_status_) let btnText = window._my_tamermonkey_status_?'停用后台播放':'启用后台播放' e.target.innerText = btnText } // 调速 const speedHandler = function(e) { let currentSpeedIndex = speedMap.findIndex(v=>_my_tamermonkey_speed_===v); if(currentSpeedIndex===speedMap.length-1){ currentSpeedIndex = 0 }else{ ++currentSpeedIndex } _my_tamermonkey_speed_ = speedMap[currentSpeedIndex] videoDom.playbackRate = _my_tamermonkey_speed_ e.target.innerText = `快进>>${_my_tamermonkey_speed_}倍速` } // 快进到最后 const toEndHandler = function(e) { console.log('快进到最后') let duration = videoDom.duration; let toEndTime = Math.floor(duration-1) videoDom.currentTime = toEndTime console.log(videoDom.currentTime) } //容器设置样式和id controlBox.id = 'myTampermonkeyControl' controlBox.style.cssText = 'position:absolute;right:0px;bottom:0px;display:flex;align-items:center;font-size:12px;' //控制按钮设置样式和id controlBtn.id = 'controlBtn' controlBtn.style.cssText = 'display:inline-block;padding: 4px 10px;border-radius:4px;margin-right:10px;cursor:pointer;background:#999;color:#fff;' controlBtn.innerText = btnText speedBtn.id = 'speedBtn' speedBtn.style.cssText = 'display:inline-block;padding: 4px 10px;border-radius:4px;cursor:pointer;background:#999;color:#fff;margin-right:10px;' speedBtn.innerText = `快进>>${_my_tamermonkey_speed_}倍速` jopeToEndBtn.style.cssText = 'display:inline-block;padding: 4px 10px;border-radius:4px;cursor:pointer;background:#999;color:#fff;' jopeToEndBtn.innerText = '跳到最后' //添加事件 controlBtn.onclick= controlHandler speedBtn.onclick = speedHandler jopeToEndBtn.onclick = toEndHandler controlBox.appendChild(controlBtn) controlBox.appendChild(speedBtn) controlBox.appendChild(jopeToEndBtn) container.appendChild(controlBox) videoDom.addEventListener('ended', function () { //结束 console.log("播放结束"); //controlBtn.click() }, false); document.addEventListener('visibilitychange', function() { if(!videoDom){ videoDom = document.getElementsByTagName('VIDEO')[0]; } var isHidden = document.hidden; console.log(document.visibilityState,isHidden,window._my_tamermonkey_status_) if (isHidden && window._my_tamermonkey_status_) { console.log(window._my_tamermonkey_status_) videoDom.play() }else if(isHidden){ videoDom.pause() } }); } if(videoDom){ // 有视频 init() }else{ let timer = null; timer = setInterval(()=>{ console.log('轮询') if(tryTimes>=10){ clearInterval(timer) timer = null return; } videoDom = document.getElementsByTagName('VIDEO')[0]; if(videoDom){ try{ init() clearInterval(timer) timer = null return; }catch(err){ clearInterval(timer) timer = null console.log(err) } } tryTimes++ },200) } // Your code here... })();