// ==UserScript== // @name 超星提前解锁章节 // @name:zh 超星提前解锁章节 // @namespace https://userscript.snomiao.com // @version 0.9.0 // @description 【解锁章节功能已失效 --- 划掉,2021-04-10 有小朋友反馈还能用,各位看情况安吧】在视频播放页面(非课程首页),右边侧边栏可以提前解锁章节。在首页右上角可以查看章节统计。我是热爱学习的好孩子 // @author snomiao@gmail.com // @match https://*.chaoxing.com/* // @downloadURL none // ==/UserScript== // // 据说还能用的评论: // [超星提前解锁章节 - 反馈]( https://greasyfork.org/zh-CN/scripts/397180-%E8%B6%85%E6%98%9F%E6%8F%90%E5%89%8D%E8%A7%A3%E9%94%81%E7%AB%A0%E8%8A%82/discussions/78545 ) // // 作者已近毕业不再使用超星课堂,想维护的同学 fork 或者 pr 或者 邮箱提交代码 到 snomiao@gmail.com 都可以。 // (() => { var 解锁 = async () => { var query = new URLSearchParams(window.location.search); var courseId = query.get('courseId'); var clazzid = query.get('clazzid'); [...document.querySelectorAll("h4>a, h5>a")].map(a => { var h4 = a.parentElement; var chapterId = h4.id.match(/(?<=cur)\d+/)[0]; /* 表示已解锁 */ var rp = h4.querySelector('.roundpointStudent.lock'); rp && (rp.innerHTML = '/'); /* 激活链接 */ a.href = `javascript: getTeacherAjax('` + courseId + `','` + clazzid + `','` + chapterId + `');`; }); } var 新元素 = (innerHTML, attributes = {}) => { var e = document.createElement("div"); e.innerHTML = innerHTML; return Object.assign(e.children[0], attributes) } var 增加统计功能 = async () => { if ([...document.querySelectorAll(".navshow ul li")].filter(e => e.innerText.trim() == "统计").length) return; // var 取统计地址 = () => { var h = document.head.innerHTML + document.body.innerHTML; var userId = localStorage.userId || (localStorage.userId = h.match(/(?<=userId: ')\d+/)[0]); return ( "/moocAnalysis/chapterStatisticByUser?courseId=" + h.match(/(?<=courseId=)\d+/)[0] + "&classId=" + h.match(/(?<=classId=)\d+/)[0] + "&userId=" + userId + "&ut=s&vc=1&cpi=" + h.match(/(?<=cpi=)\d+/)[0] + "&enc=" + h.match(/(?<=enc=)\w+/)[0]) }; var e = document.querySelector(".navshow ul"); e && e.appendChild(新元素('
  • 统计
  • ')) } var main = () => { 解锁().catch(console.error) 增加统计功能().catch(console.error) } main(); window.addEventListener("load", main); // document.addEventListener("load", main); // setInterval(main, 10000) })()