Greasy Fork

Greasy Fork is available in English.

城院学堂云脚本

在城院的学堂云3上可以挂着视频一直播放(暂时适配毛概,其他视频可以自行测试)

目前为 2020-02-25 提交的版本,查看 最新版本

// ==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
// ==/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('已经开始播放')
  })
})()