// ==UserScript==
// @name chinahrt继续教育
// @include http://web.chinahrt.com
// @include https://web.chinahrt.com
// @version 2.3
// @description 全新2.0版本,自动播放下一章节,自动开始并静音,播放速度控制,进度拖动。增加配置面板,可以自由调节。
// @author yikuaibaiban(https://github.com/yikuaibaiban)
// @match http://videoadmin.chinahrt.com.cn/videoPlay/play*
// @match http://videoadmin.chinahrt.com/videoPlay/play*
// @match https://videoadmin.chinahrt.com.cn/videoPlay/play*
// @match https://videoadmin.chinahrt.com/videoPlay/play*
// @grant none
// @license MIT
// @namespace https://github.com/yikuaibaiban/chinahrt
// @downloadURL none
// ==/UserScript==
window.onload = function() {
if (document.head.getElementsByTagName("title")[0].innerText == "404") {
var h1 = document.createElement('h1');
h1.innerHTML = '课程已经播放完成,请更换课程!';
h1.style.color = 'red';
h1.style.fontSize = '30px';
h1.style.textAlign = 'center';
h1.style.marginTop = '50px';
document.body.append(h1);
alert('课程已经播放完成,请更换课程!');
return;
}
$(document).ready(function() {
// (function () {
// 'use strict';
// 顶端漂浮提示
var $topTips = $('
受到浏览器策略影响第一次可能无法自动播放,请手动点击播放。
');
$(document.body).append($topTips);
// 从localstorage中获取设置
var autoplay = (localStorage.getItem('autoplay') || 'true') === 'true';
var mute = (localStorage.getItem('mute') || 'true') === 'true';
var speed = parseInt(localStorage.getItem('speed') || '1');
var drag = parseInt(localStorage.getItem('drag') || '5');
// ==================页面设计开始==========================
// 增加页面配置
var configDiv = document.createElement("div");
configDiv.style.cssText = "position:fixed;right:0;top:0;width:250px;height:400px;background-color:#FFF;z-index:9999;border: 1px solid #ccc;";
// 标题
var configTitle = document.createElement("div");
configTitle.style.cssText = "border-bottom:1px solid #ccc ;padding: 5px;font-weight: bold;";
configTitle.innerHTML = "视频控制配置";
configDiv.appendChild(configTitle);
// 外部包裹
var configWrapper = document.createElement("div");
configWrapper.style.cssText = "padding: 5px;padding-bottom: 5px;font-size: 12px;line-height: 150%;";
// 是否自动播放
var configAutoPlay = document.createElement("div");
configAutoPlay.style.cssText = "border-bottom: 1px dotted #ccc ;padding-bottom: 5px;";
var p = document.createElement("p");
p.innerHTML = "是否自动播放:";
configAutoPlay.appendChild(p);
var inputAutoPlay = document.createElement("input");
inputAutoPlay.type = "radio";
inputAutoPlay.name = "autoPlay";
inputAutoPlay.value = "true";
inputAutoPlay.checked = autoplay;
inputAutoPlay.onclick = function() {
localStorage.setItem('autoplay', 'true');
}
configAutoPlay.appendChild(inputAutoPlay);
var labelAutoPlay = document.createElement("label");
labelAutoPlay.innerHTML = "是";
configAutoPlay.appendChild(labelAutoPlay);
var inputAutoPlay2 = document.createElement("input");
inputAutoPlay2.type = "radio";
inputAutoPlay2.name = "autoPlay";
inputAutoPlay2.value = "false";
inputAutoPlay2.checked = !autoplay;
inputAutoPlay2.onclick = function() {
localStorage.setItem('autoplay', 'false');
}
configAutoPlay.appendChild(inputAutoPlay2);
var labelAutoPlay2 = document.createElement("label");
labelAutoPlay2.innerHTML = "否";
configAutoPlay.appendChild(labelAutoPlay2);
configWrapper.appendChild(configAutoPlay);
// 是否静音
var configMute = document.createElement("div");
configMute.style.cssText = "border-bottom: 1px dotted #ccc ;padding-bottom: 5px;";
var p = document.createElement("p");
p.innerHTML = "是否静音:";
configMute.appendChild(p);
var inputMute = document.createElement("input");
inputMute.type = "radio";
inputMute.name = "mute";
inputMute.value = "true";
inputMute.checked = mute;
inputMute.onclick = function() {
localStorage.setItem('mute', 'true');
player.videoMute();
}
configMute.appendChild(inputMute);
var labelMute = document.createElement("label");
labelMute.innerHTML = "是";
configMute.appendChild(labelMute);
var inputMute2 = document.createElement("input");
inputMute2.type = "radio";
inputMute2.name = "mute";
inputMute2.value = "false";
inputMute2.checked = !mute;
inputMute2.onclick = function() {
localStorage.setItem('mute', 'false');
player.videoEscMute();
}
configMute.appendChild(inputMute2);
var labelMute2 = document.createElement("label");
labelMute2.innerHTML = "否";
configMute.appendChild(labelMute2);
var muteTip = document.createElement("p");
muteTip.style.cssText = "font-size:13px;font-weight:bold;";
muteTip.innerHTML = "注意:不静音,视频可能会出现不会自动播放";
configMute.appendChild(muteTip);
configWrapper.appendChild(configMute);
// 启用拖放
var configDrag = document.createElement("div");
configDrag.style.cssText = "border-bottom: 1px dotted #ccc ;padding-bottom: 5px;";
var p = document.createElement("p");
p.innerHTML = "启用拖放(慎用):";
configDrag.appendChild(p);
var inputDrag = document.createElement("input");
inputDrag.type = "radio";
inputDrag.name = "drag";
inputDrag.value = "5";
inputDrag.checked = drag === 5;
inputDrag.onclick = function() {
localStorage.setItem('drag', '5');
player.changeConfig('config', 'timeScheduleAdjust', 5);
}
configDrag.appendChild(inputDrag);
var labelDrag = document.createElement("label");
labelDrag.innerHTML = "还原";
configDrag.appendChild(labelDrag);
var inputDrag2 = document.createElement("input");
inputDrag2.type = "radio";
inputDrag2.name = "drag";
inputDrag2.value = "1";
inputDrag2.checked = drag === 1;
inputDrag2.onclick = function() {
localStorage.setItem('drag', '1');
player.changeConfig('config', 'timeScheduleAdjust', 1);
}
configDrag.appendChild(inputDrag2);
var labelDrag2 = document.createElement("label");
labelDrag2.innerHTML = "启用";
configDrag.appendChild(labelDrag2);
configWrapper.appendChild(configDrag);
// 播放速度调整
var configSpeed = document.createElement("div");
configSpeed.style.cssText = "border-bottom: 1px dotted #ccc ;padding-bottom: 5px;";
var p = document.createElement("p");
p.innerHTML = "播放速度调整(慎用,不知后台是否检测):";
configSpeed.appendChild(p);
var inputSpeed = document.createElement("input");
inputSpeed.type = "radio";
inputSpeed.name = "speed";
inputSpeed.value = "0";
inputSpeed.checked = speed === 0;
inputSpeed.onclick = function() {
localStorage.setItem('speed', '0');
player.changePlaybackRate(0);
}
configSpeed.appendChild(inputSpeed);
var labelSpeed = document.createElement("label");
labelSpeed.innerHTML = "低速";
configSpeed.appendChild(labelSpeed);
var inputSpeed2 = document.createElement("input");
inputSpeed2.type = "radio";
inputSpeed2.name = "speed";
inputSpeed2.value = "1";
inputSpeed2.checked = speed === 1;
inputSpeed2.onclick = function() {
localStorage.setItem('speed', '1');
player.changePlaybackRate(1);
}
configSpeed.appendChild(inputSpeed2);
var labelSpeed2 = document.createElement("label");
labelSpeed2.innerHTML = "正常";
configSpeed.appendChild(labelSpeed2);
var inputSpeed3 = document.createElement("input");
inputSpeed3.type = "radio";
inputSpeed3.name = "speed";
inputSpeed3.value = "2";
inputSpeed3.checked = speed === 2;
inputSpeed3.onclick = function() {
localStorage.setItem('speed', '2');
player.changePlaybackRate(2);
}
configSpeed.appendChild(inputSpeed3);
var labelSpeed3 = document.createElement("label");
labelSpeed3.innerHTML = "高速";
configSpeed.appendChild(labelSpeed3);
var inputSpeed4 = document.createElement("input");
inputSpeed4.type = "radio";
inputSpeed4.name = "speed";
inputSpeed4.value = "3";
inputSpeed4.checked = speed === 3;
inputSpeed4.onclick = function() {
localStorage.setItem('speed', '3');
player.changePlaybackRate(3);
}
configSpeed.appendChild(inputSpeed4);
var labelSpeed4 = document.createElement("label");
labelSpeed4.innerHTML = "超高速";
configSpeed.appendChild(labelSpeed4);
var speedTip = document.createElement("div");
speedTip.style.cssText = "font-size:13px;font-weight:bold;";
speedTip.innerHTML = "提示:基于播放器本身的速度挡位实现,目测最高大概是2倍速。";
configSpeed.appendChild(speedTip);
configWrapper.appendChild(configSpeed);
configDiv.appendChild(configWrapper);
// 联系方式
var contactDiv = document.createElement("div");
contactDiv.style.cssText = "margin-top:10px;font-size:12px;font-weight:bold;line-height: 150%;";
// 博客园地址
var blogDiv = document.createElement("div");
var blog = document.createElement("a");
blog.href = "https://www.cnblogs.com/ykbb/";
blog.target = "_blank";
blog.innerHTML = "博客园地址";
blogDiv.appendChild(blog);
contactDiv.appendChild(blogDiv);
// 意见反馈
var feedbackDiv = document.createElement("div");
var feedback = document.createElement("a");
feedback.href = "https://msg.cnblogs.com/send/ykbb";
feedback.target = "_blank";
feedback.innerHTML = "点此意见反馈";
feedbackDiv.appendChild(feedback);
contactDiv.appendChild(feedbackDiv);
configDiv.appendChild(contactDiv);
document.body.appendChild(configDiv);
// ==================页面设计结束==========================
$("video").prop("muted", "muted");
// 移除讨厌的事件
window.onfocus = function() {};
window.onblur = function() {};
var tmp = setInterval(function() {
if (player && player.loaded) {
player.addListener('loadedmetadata', function() {
// 总是显示播放进度
player.changeControlBarShow(true);
// 拖动开关
player.changeConfig('config', 'timeScheduleAdjust', drag);
if (mute) {
player.videoMute();
} else {
player.videoEscMute();
}
player.changePlaybackRate(speed);
if (autoplay) {
player.videoPlay();
}
clearInterval(tmp);
});
// 播放结束
player.addListener('ended', function() {
var url = window.location.href;
var sectionId = /sectionId=([^&]*)/.exec(url)[1];
var courseId = sectionId.split('-')[0];
var sectionId = sectionId.split('-')[1];
var sectionId = parseInt(sectionId) + 1;
var newUrl = url.replace(/sectionId=([^&]*)/, 'sectionId=' + courseId + '-' + sectionId);
window.location.href = newUrl;
});
}
}, 500);
});
}