Greasy Fork

wsxy_handlePlayer

网上学院函数库:优化课程视频播放器

目前为 2020-02-03 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/395994/769682/wsxy_handlePlayer.js

// ==UserScript==
// @name          wsxy_handlePlayer
// @namespace     Vionlentmonkey
// @version       0.1
// @description   网上学院函数库:优化课程视频播放器
// @require       https://greasyfork.org/scripts/381403-fakenavigators/code/fakeNavigators.js
// @grant         none
// ==/UserScript==

const killFlash = () => {
  const html5Player = document.getElementById('course_player5'); // 旧播放器
  const video_media = document.getElementById('video_media'); // 新播放器
  if (video_media) {
    // 新播放器用 confirm 询问是否继续学习,阻塞脚本运行,跳过这类课程比较好。
    // 通过 iframe 源代码可以明显看到不同
    // 测试例:http://218.94.1.175:8087/sfxzwsxy/jypxks/modules/train/ware/course_ware_view.jsp?applyPk=3063755&courseType=1
    console.log('新播放器');
    if (GM_config.get('muted')) {
      video_media.querySelector('video').muted = true;
      // https://developer.mozilla.org/docs/Web/Guide/Events/Media_events
      video_media.querySelector('video').play();
    }
  } else if (html5Player) {
    console.log('旧播放器');
    // 静音模式下自动播放无需用户授权
    // https://developer.mozilla.org/docs/Web/Media/Autoplay_guide#Autoplay_availability
    if (GM_config.get('muted')) {
      html5Player.muted = true;
      // https://developer.mozilla.org/docs/Web/Guide/Events/Media_events
      html5Player.play();
    }
  } else {
    // 旧版本播放器能否成功调用 HTML5 似乎是玄学问题,检测不到 HTML5 播放器则刷新
    location.reload(true);
  }
};

const autoBegin = () => {
  // 自动从课程封面进入播放页面
  if (document.querySelector('img[src="courseware/iconImg/z3.png"]')) {
    document.querySelector('img[src="courseware/iconImg/z3.png"]').click();
  }
  // 老播放器对话框手动点击即暂停,新版的无法模拟点击但手动点击不影响后台播放
  if (document.getElementById('cancel')) {
    //document.getElementById('confirm').click(); // 继续学习;可能需要多次重复才能完成一课时。
    document.getElementById('cancel').click(); // 大侠还请重新来过
  }
};

const autoQue = () => {
  // 旧播放器自动做题,找不到测试例进一步优化。
  if (document.querySelectorAll('div.option>label>input[name="que"]').length > 0) {
    document.querySelectorAll('div.option>label>input[name="que"]')[0].click();
    document.querySelectorAll('div.option>label>input[name="que"]')[1].click(); // 兼容多选题
    document.getElementsByClassName('button')[0].click(); // 提交
    if (document.getElementsByClassName('button_xia').length === 1) {
      document.getElementsByClassName('button_xia')[0].click(); // 下一题
    }
    if (document.getElementsByClassName('button_wan').length === 1) {
      document.getElementsByClassName('button_wan')[0].click(); // 完成
    }
    // .click() 有反向操作风险
    document.getElementById('course_player5').play();
  }
};