// ==UserScript== // @name 慕课网视频自动播放下一节 Imooc video, auto play next section // @namespace http://tampermonkey.net/?imooc-auto-next // @version 0.1.1 // @description 慕课网视频自动播放下一节,可手动开启/关闭 Imooc video, auto play next section, which can be manually turned on/off // @icon https://www.imooc.com/favicon.ico // @author Wilson // @match *://www.imooc.com/video/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; //等待jQuery加载完成和dom加载完成 var waitUntil=function(condfunc, callback, interval, trys){ var getGuid = getGuid||function() { var d = new Date().getTime(); var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = (d + Math.random()*16)%16 | 0; d = Math.floor(d/16); return (c=='x' ? r : (r&0x3|0x8)).toString(16); }); return uuid; }; var timer = {}, counter={}; var waiter = function(condfunc, callback, interval, trys, guid){ guid = guid || getGuid(); interval = interval || 100; trys = trys || 300; counter[guid] = counter[guid] ? counter[guid]++ : 1; if(counter[guid]>trys){ if(timer[guid]) clearTimeout(timer[guid]); //callback('fail'); return; } timer[guid] = setTimeout(function(){ if(condfunc()){ if(timer[guid]) clearTimeout(timer[guid]); callback('ok'); } else { if(timer[guid]) clearTimeout(timer[guid]); waiter(condfunc, callback, interval, trys, guid); } }, interval); } waiter(condfunc, callback, interval, trys); } //监控下一节 var intvelTimer=null, listenNextBtn = function(delay){ delay = delay || 1000; intvelTimer=setInterval(function(){ if($(".vjs-ended").length > 0 && localStorage.getItem("_w_auto_next")){ $(".J-next-btn").click(); } }, delay); } waitUntil(function(){return typeof jQuery !=="undefined" && $(".vjs-remaining-time").length>0}, function(){ //插入选项 var autoNextHtml='
'; $(".vjs-remaining-time").after(autoNextHtml); $("#_w_auto_next_btn").prop("checked", localStorage.getItem("_w_auto_next")?true:false); //监控下一节 listenNextBtn(); //选项改变事件 $("#_w_auto_next_btn").on("change", function(){ var me = $(this); if(me.is(":checked")){ if(!intvelTimer) listenNextBtn(); localStorage.setItem("_w_auto_next", 1); } else { if(intvelTimer) clearInterval(intvelTimer); localStorage.setItem("_w_auto_next", ""); } }); }); })();