// ==UserScript== // @name 城院学堂云脚本 // @namespace http://www.kairlec.com/ // @version 0.4 // @description 在城院的学堂云3上可以挂着视频一直播放(暂时适配毛概,其他视频可以自行测试) // @author Kairlec // @match https://hncu.xuetangx.com/* // @grant unsafeWindow // @run-at document-idle // @downloadURL none // ==/UserScript== (function () { 'use strict' // Your code here... $(document).ready(async function () { const sleep = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)) } console.log('脚本等待页面初始化中') console.log('Edit by Kairlec') const $ = unsafeWindow.jQuery // 好像做不到 $(window).blur = function () {} console.log('hook焦点函数完成') var video = unsafeWindow.video var begin = new Date() while (typeof (video) === 'undefined') { await sleep(1) if (new Date().getTime() - begin.getTime() > 10000) { console.log('脚本初始化超时') return } video = unsafeWindow.video } console.log('初始化完成') video.pause = function () {} console.log('hook暂停函数完成') video.onended = function () { // 播放下一个视频 var thisVideoName = $('div.video-header > span.chapter-name').text()// 获取当前视频名称 $('div.course-structure-tree__wrap').find('i.el-icon-arrow-down').click()// 先释放所有节点 var videoList = $('div.course-structure-tree__wrap').find('div[role="progressbar"]')// 获取所有视频列表 var localVideo = $('div.course-structure-tree__wrap').find('span').filter(function () { return $(this).text().search(thisVideoName) !== -1 }).parent().find('div[role="progressbar"]')[0]// 获取当前视频 var ls = false $.each(videoList, function (index, item) { if (ls) { if (parseInt($(item).attr('aria-valuenow')) < parseInt($(item).attr('aria-valuemax'))) { $(item).click() } return false } else { if (item === localVideo) { ls = true } } }) } console.log('hook结束函数完成') video.muted = true// 静音视频,想看视频的可以删除这一行 video.play()// 播放当前视频 console.log('已经开始播放') }) })()