超星尔雅
var setting = {
time: 8E3
, token: ''
, review: 0
, queue: 1
, video: 1
, work: 1
, audio: 1
, book: 1
, docs: 1
, jump: 1
, read: '65'
, face: 1
, total: 0
, line: '公网1'
, http: '标清'
, vol: '0'
, rate: '1'
, auto: 0
, none: 0
, scale: 0
, course: 0
, lock: 1
, school: '账号为手机号可以不修改此参数'
, username: ''
, password: ''
} ,
_self = unsafeWindow,
url = location. pathname,
top = _self;
if ( url != '/studyApp/studying' && top != _self. top) document. domain = location. host. replace ( /.+?\./ , '' ) ;
try {
while ( top != _self. top) {
top = top. parent. document ? top. parent : _self. top;
if ( top. location. pathname == '/mycourse/studentstudy' ) break ;
}
} catch ( err ) {
top = _self;
}
var $ = _self. jQuery || top. jQuery,
parent = _self == top ? self : _self. parent,
Ext = _self. Ext || parent. Ext || { } ,
UE = _self. UE ,
vjs = _self. videojs;
String. prototype. toCDB = function ( ) {
return this . replace ( /\s/g , '' ) . replace ( /[\uff01-\uff5e]/g , function ( str) {
return String. fromCharCode ( str. charCodeAt ( 0 ) - 65248 ) ;
} ) . replace ( /[“”]/g , '"' ) . replace ( /[‘’]/g , "'" ) . replace ( /。/g , '.' ) ;
} ;
setting. normal = '' ;
setting. job = [ ':not(*)' ] ;
setting. video && setting. job. push ( 'iframe[src*="/video/index.html"]' ) ;
setting. work && setting. job. push ( 'iframe[src*="/work/index.html"]' ) ;
setting. audio && setting. job. push ( 'iframe[src*="/audio/index.html"]' ) ;
setting. book && setting. job. push ( 'iframe[src*="/innerbook/index.html"]' ) ;
setting. docs && setting. job. push ( 'iframe[src*="/ppt/index.html"]' , 'iframe[src*="/pdf/index.html"]' ) ;
setting. tip = ! setting. queue || top != _self && jobSort ( $ || Ext. query) ;
if ( url == '/mycourse/studentstudy' ) {
_self. checkMobileBrowerLearn = $. noop;
var classId = location. search. match ( /cla[zs]{2}id=(\d+)/i ) [ 1 ] || 0 ,
courseId = _self. courseId || location. search. match ( /courseId=(\d+)/i ) [ 1 ] || 0 ;
setting. lock || $ ( '#coursetree' ) . on ( 'click' , '[onclick*=void], [href*=void]' , function ( ) {
_self. getTeacherAjax ( courseId, classId, $ ( this ) . parent ( ) . attr ( 'id' ) . slice ( 3 ) ) ;
} ) ;
} else if ( url == '/ananas/modules/video/index.html' && setting. video) {
if ( setting. review) _self. greenligth = Ext. emptyFn;
checkPlayer ( _self. supportH5Video ( ) ) ;
} else if ( url == '/work/doHomeWorkNew' || url == '/api/work' || url == '/work/addStudentWorkNewWeb' ) {
if ( ! UE ) {
var len = ( $ || Ext. query || Array) ( 'font:contains(未登录)' , document) . length;
setTimeout ( len == 1 ? top. location. reload : parent. greenligth, setting. time) ;
} else if ( setting. work) {
setTimeout ( relieveLimit, 0 ) ;
beforeFind ( ) ;
}
} else if ( url == '/ananas/modules/audio/index.html' && setting. audio) {
if ( setting. review) _self. greenligth = Ext. emptyFn;
_self. videojs = hookAudio;
hookAudio. xhr = vjs. xhr;
} else if ( url == '/ananas/modules/innerbook/index.html' && setting. book && setting. tip) {
setTimeout ( function ( ) {
_self. setting ? _self. top. onchangepage ( _self. getFrameAttr ( 'end' ) ) : _self. greenligth ( ) ;
} , setting. time) ;
} else if ( url. match ( /^\/ananas\/modules\/(ppt|pdf)\/index\.html$/ ) && setting. docs && setting. tip) {
setTimeout ( function ( ) {
_self. setting ? _self. finishJob ( ) : _self. greenligth ( ) ;
} , setting. time) ;
frameElement. setAttribute ( 'download' , 1 ) ;
} else if ( url == '/knowledge/cards' ) {
$ && checkToNext ( ) ;
} else if ( url. match ( /^\/(course|zt)\/\d+\.html$/ ) ) {
setTimeout ( function ( ) {
+ setting. read && _self. sendLogs && $ ( '.course_section:eq(0) .chapterText' ) . click ( ) ;
} , setting. time) ;
} else if ( url == '/ztnodedetailcontroller/visitnodedetail' ) {
setting. read *= 60 / $ ( '.course_section' ) . length;
setting. read && _self. sendLogs && autoRead ( ) ;
} else if ( url == '/mycourse/studentcourse' ) {
var gv = location. search. match ( /d=\d+&/g ) ;
setting. total && $ ( '' , {
href: '/moocAnalysis/chapterStatisticByUser?classI' + gv[ 1 ] + 'courseI' + gv[ 0 ] + 'userId=' + _self. getCookie ( '_uid' ) + '&ut=s' ,
target: '_blank' ,
title: '点击查看章节统计' ,
style: 'margin: 0 25px;' ,
html: '本课程共' + $ ( '.icon' ) . length + '节,剩余' + $ ( 'em:not(.openlock)' ) . length + '节未完成'
} ) . appendTo ( '.zt_logo' ) . parent ( ) . width ( 'auto' ) ;
} else if ( url. match ( /^\/visit\/(courses|interaction)$/ ) ) {
setting. face && $ ( '.zmodel' ) . on ( 'click' , '[onclick^=openFaceTip]' , DisplayURL) ;
} else if ( location. host. match ( /^passport2/ ) ) {
setting. username && getSchoolId ( ) ;
} else if ( location. hostname == 'i.mooc.chaoxing.com' ) {
_self. layui. use ( 'layer' , function ( ) {
this . layer. open ( { content: '拖动进度条、倍速播放、秒过会导致不良记录!题库在慢慢补充,搜不到的题目系统会在次日进行自动补充' , title: '超星网课助手提示' , btn: '我已知悉' , offset: 't' , closeBtn: 0 } ) ;
} ) ;
} else if ( url == '/widget/pcvote/goStudentVotePage' ) {
$ ( ':checked' ) . click ( ) ;
$ ( '.StudentTimu' ) . each ( function ( index) {
var ans = _self. questionlist[ index] . answer;
$ ( ':radio, :checkbox' , this ) . each ( function ( num) {
ans[ num] . isanswer && this . click ( ) ;
} ) ;
$ ( ':text' , this ) . val ( function ( num) {
return $ ( ans[ num] . content) . text ( ) . trim ( ) ;
} ) ;
} ) ;
} else if ( url == '/work/selectWorkQuestionYiPiYue' ) {
submitAnswer ( getIframe ( ) . parent ( ) , $. extend ( true , [ ] , parent. _data) ) ;
}
function getIframe ( tip, win, job) {
if ( ! $) return Ext. get ( frameElement || [ ] ) . parent ( ) . child ( '.ans-job-icon' ) || Ext. get ( [ ] ) ;
do {
win = win ? win. parent : _self;
job = $ ( win. frameElement) . prevAll ( '.ans-job-icon' ) ;
} while ( ! job. length && win. parent. frameElement) ;
return tip ? win : job;
}
function jobSort ( $) {
var fn = $. fn ? [ getIframe ( 1 ) , 'length' ] : [ self, 'dom' ] ,
sel = setting. job. join ( ', :not(.ans-job-finished) > .ans-job-icon' + setting. normal + ' ~ ' ) ;
if ( $ ( sel, fn[ 0 ] . parent. document) [ 0 ] == fn[ 0 ] . frameElement) return true ;
if ( ! getIframe ( ) [ fn[ 1 ] ] || getIframe ( ) . parent ( ) . is ( '.ans-job-finished' ) ) return null ;
setInterval ( function ( ) {
$ ( sel, fn[ 0 ] . parent. document) [ 0 ] == fn[ 0 ] . frameElement && fn[ 0 ] . location. reload ( ) ;
} , setting. time) ;
}
function checkPlayer ( tip) {
_self. videojs = hookVideo;
hookVideo. xhr = vjs. xhr;
Ext. isSogou = Ext. isIos = Ext. isAndroid = false ;
var data = Ext. decode ( _self. config ( 'data' ) ) || { } ;
delete data. danmaku;
data. doublespeed = 1 ;
frameElement. setAttribute ( 'data' , Ext. encode ( data) ) ;
if ( tip) return ;
_self. supportH5Video = function ( ) { return true ; } ;
alert ( '此浏览器不支持html5播放器,请更换浏览器' ) ;
}
function hookVideo ( ) {
_self. alert = console. log;
var config = arguments[ 1 ] ,
line = Ext. Array. filter ( Ext. Array. map ( config. playlines, function ( value, index) {
return value. label == setting. line && index;
} ) , function ( value) {
return Ext. isNumber ( value) ;
} ) [ 0 ] || 0 ,
http = Ext. Array. filter ( config. sources, function ( value) {
return value. label == setting. http;
} ) [ 0 ] ;
config. playlines. unshift ( config. playlines[ line] ) ;
config. playlines. splice ( line + 1 , 1 ) ;
config. plugins. videoJsResolutionSwitcher. default = http ? http. res : 360 ;
config. plugins. studyControl. enableSwitchWindow = 1 ;
config. plugins. timelineObjects. url = '/richvideo/initdatawithviewer?' ;
config. plugins. seekBarControl. enableFastForward = 1 ;
if ( ! setting. queue) delete config. plugins. studyControl;
var player = vjs. apply ( this , arguments) ,
a = '+ _self. config ( 'objectid' ) + '" target="_blank">' ,
img = ' ' ;
player. volume ( Math. round ( setting. vol) / 100 || 0 ) ;
Ext. get ( player. controlBar. addChild ( 'Button' ) . el_) . setHTML ( a + img + '' ) . dom. title = '下载视频' ;
player. on ( 'loadstart' , function ( ) {
setting. tip && this . play ( ) . catch ( Ext. emptyFn) ;
this . playbackRate ( setting. rate > 16 || setting. rate < 0.0625 ? 1 : setting. rate) ;
} ) ;
player. one ( [ 'loadedmetadata' , 'firstplay' ] , function ( ) {
setting. two = setting. rate === '0' && setting. two < 1 ;
setting. two && config. plugins. seekBarControl. sendLog ( this . children_[ 0 ] , 'ended' , Math. floor ( this . cache_. duration) ) ;
} ) ;
player. on ( 'ended' , function ( ) {
Ext. fly ( frameElement) . parent ( ) . addCls ( 'ans-job-finished' ) ;
} ) ;
return player;
}
function hookAudio ( ) {
_self. alert = console. log;
var config = arguments[ 1 ] ;
config. plugins. studyControl. enableSwitchWindow = 1 ;
config. plugins. seekBarControl. enableFastForward = 1 ;
if ( ! setting. queue) delete config. plugins. studyControl;
var player = vjs. apply ( this , arguments) ,
a = '+ _self. config ( 'objectid' ) + '" target="_blank">' ,
img = ' ' ;
player. volume ( Math. round ( setting. vol) / 100 || 0 ) ;
player. playbackRate ( setting. rate > 16 || setting. rate < 0.0625 ? 1 : setting. rate) ;
Ext. get ( player. controlBar. addChild ( 'Button' ) . el_) . setHTML ( a + img + '' ) . dom. title = '下载音频' ;
player. on ( 'loadeddata' , function ( ) {
setting. tip && this . play ( ) . catch ( Ext. emptyFn) ;
} ) ;
player. one ( 'firstplay' , function ( ) {
setting. rate === '0' && config. plugins. seekBarControl. sendLog ( this . children_[ 0 ] , 'ended' , Math. floor ( this . cache_. duration) ) ;
} ) ;
player. on ( 'ended' , function ( ) {
Ext. fly ( frameElement) . parent ( ) . addCls ( 'ans-job-finished' ) ;
} ) ;
return player;
}
function relieveLimit ( ) {
if ( setting. scale) _self. UEDITOR_CONFIG . scaleEnabled = false ;
$. each ( UE . instants, function ( ) {
var key = this . key;
this . ready ( function ( ) {
this . destroy ( ) ;
UE . getEditor ( key) ;
} ) ;
} ) ;
}
function beforeFind ( ) {
setting. regl = parent. greenligth || $. noop;
if ( $. type ( parent. _data) == 'array' ) return setting. regl ( ) ;
setting. div = $ (
''
+
' ' +
'正在搜索答案...
' +
'暂停答题 ' +
'' + ( setting
. auto
? '取消本次自动提交' : '开启本次自动提交' ) + '' +
'重新查询 ' +
'折叠面板 ' +
''
+
'' +
'' +
'' +
' 题号 ' +
' 题目(点击可复制) ' +
' 答案(点击可复制) ' +
' ' +
' ' +
'' +
'' +
' 答案提示框 已折叠 ' +
' ' +
' ' +
'' +
'' +
' ' +
' ' +
' ' +
'
' +
' ' +
' '
) . appendTo ( 'body' ) . on ( 'click' , 'button, td' , function ( ) {
var len = $ ( this ) . prevAll ( 'button' ) . length;
if ( this . nodeName == 'TD' ) {
$ ( this ) . prev ( ) . length && GM_setClipboard ( $ ( this ) . text ( ) ) ;
} else if ( ! $ ( this ) . siblings ( ) . length) {
$ ( this ) . parent ( ) . text ( '正在搜索答案...' ) ;
setting. num++ ;
} else if ( len === 0 ) {
if ( setting. loop) {
clearInterval ( setting. loop) ;
delete setting. loop;
len = [ '已暂停搜索' , '继续答题' ] ;
} else {
setting. loop = setInterval ( findAnswer, setting. time) ;
len = [ '正在搜索答案...' , '暂停答题' ] ;
}
setting. div. children ( 'div:eq(0)' ) . html ( function ( ) {
return $ ( this ) . data ( 'html' ) || len[ 0 ] ;
} ) . removeData ( 'html' ) ;
$ ( this ) . html ( len[ 1 ] ) ;
} else if ( len == 1 ) {
setting. auto = ! setting. auto;
$ ( this ) . html ( setting. auto ? '取消本次自动提交' : '开启本次自动提交' ) ;
} else if ( len == 2 ) {
parent. location. reload ( ) ;
} else if ( len == 3 ) {
setting. div. find ( 'tbody, tfoot' ) . toggle ( ) ;
}
} ) . find ( 'table, td, th' ) . css ( 'border' , '1px solid' ) . end ( ) ;
setting. lose = setting. num = 0 ;
setting. data = parent. _data = [ ] ;
setting. over = '跳过此题 ' ;
setting. curs = $ ( 'script:contains(courseName)' , top. document) . text ( ) . match ( /courseName:\'(.+?)\'|$/ ) [ 1 ] || $ ( 'h1' ) . text ( ) . trim ( ) || '无';
setting. loop = setInterval ( findAnswer, setting. time) ;
var tip = ( { undefined: '任务点排队中' , null : '等待切换中' } ) [ setting. tip] ;
tip && setting. div. children ( 'div:eq(0)' ) . data ( 'html' , tip) . siblings ( 'button:eq(0)' ) . click ( ) ;
}
function findAnswer ( ) {
if ( setting. num >= $ ( '.TiMu' ) . length) {
var arr = setting. lose ? [ '共有 ' + setting. lose + ' 道题目待完善(已深色标注)' , saveThis] : [ '答题已完成' , submitThis] ;
setting. div. children ( 'div:eq(0)' ) . data ( 'html' , arr[ 0 ] ) . siblings ( 'button:eq(0)' ) . hide ( ) . click ( ) ;
return setTimeout ( arr[ 1 ] , setting. time) ;
}
var $TiMu = $ ( '.TiMu' ) . eq ( setting. num) ,
question = filterImg ( $TiMu. find ( '.Zy_TItle:eq(0) .clearfix' ) ) . replace ( /^【.*?】\s*/ , '' ) . replace ( /\s*(\d+\.\d+分)$/ , '' ) . replace ( /[(]\s*[)]。$/ , '' ) . replace ( /(\s*)。$/ , '' ) . replace ( /[(]\s*[)]$/ , '' ) . replace ( /(\s*)$/ , '' ) . replace ( /。$/ , '' ) ,
type = $TiMu. find ( 'input[name^=answertype]:eq(0)' ) . val ( ) || '-1' ;
GM_xmlhttpRequest ( {
method: 'POST' ,
url: 'http://129.204.175.209/cha_xin.php' ,
headers: {
'Content-type' : 'application/x-www-form-urlencoded'
} ,
data: 'content=' + encodeURIComponent ( question) ,
timeout: setting. time,
onload: function ( xhr) {
if ( ! setting. loop) {
} else if ( xhr. status == 200 ) {
var obj = $. parseJSON ( xhr. responseText. replace ( /^操作数据失败!/ , '' ) ) || { } ;
if ( obj. code == 1 ) {
setting. div. children ( 'div:eq(0)' ) . text ( '正在搜索答案...' ) ;
var td = ' ,
answer = String ( obj. answer) . replace ( /&/g , '&' ) . replace ( /<(?!img)/g , '<' ) ;
obj. answer = /^http/ . test ( answer) ? ' + obj. answer + '">' : obj. answer;
$ (
'' +
td + ' text-align: center;">' + $TiMu. find ( '.Zy_TItle:eq(0) i' ) . text ( ) . trim ( ) + '' +
td + '" title="点击可复制">' + ( question. match ( ') ? question : question. replace ( /&/g , '&' ) . replace ( /, '<' ) ) + '' +
td + '" title="点击可复制">' + ( /^http/ . test ( answer) ? obj. answer : '' ) + answer + '' +
' '
) . appendTo ( setting. div. find ( 'tbody' ) ) . css ( 'background-color' , fillAnswer ( $TiMu. find ( 'ul:eq(0)' ) . find ( 'li' ) , obj, type) ? '' : 'rgba(0, 150, 136, 0.6)' ) ;
setting. data[ setting. num++ ] = {
code: obj. code > 0 ? 1 : 0 ,
question: question,
option: obj. answer,
type: Number ( type)
} ;
} else {
setting. div. children ( 'div:eq(0)' ) . html ( setting. over + obj. answer || setting. over + '服务器繁忙,正在重试...' ) ;
}
setting. div. children ( 'span' ) . html ( obj. msg || '' ) ;
} else if ( xhr. status == 403 ) {
var html = xhr. responseText. indexOf ( '{' ) ? '请求过于频繁,建议稍后再试' : $. parseJSON ( xhr. responseText) . data;
setting. div. children ( 'div:eq(0)' ) . data ( 'html' , html) . siblings ( 'button:eq(0)' ) . click ( ) ;
} else {
setting. div. children ( 'div:eq(0)' ) . html ( setting. over + '服务器异常,正在重试...' ) ;
}
} ,
ontimeout: function ( ) {
setting. loop && setting. div. children ( 'div:eq(0)' ) . html ( setting. over + '服务器超时,正在重试...' ) ;
}
} ) ;
}
function fillAnswer ( $li, obj, type) {
var $input = $li. find ( ':radio, :checkbox' ) ,
str = String ( obj. answer) . toCDB ( ) || new Date ( ) . toString ( ) ,
data = str. split ( /#|\x01|\|/ ) ,
opt = obj. opt || str,
state = setting. lose;
obj. code > 0 && $input. each ( function ( index) {
if ( this . value == 'true' ) {
data. join ( ) . match ( /(^|,)(正确|是|对|√|T|ri)(,|$)/ ) && this . click ( ) ;
} else if ( this . value == 'false' ) {
data. join ( ) . match ( /(^|,)(错误|否|错|×|F|wr)(,|$)/ ) && this . click ( ) ;
} else {
var tip = filterImg ( $li. eq ( index) . find ( '.after' ) ) . toCDB ( ) || new Date ( ) . toString ( ) ;
Boolean ( $. inArray ( tip, data) + 1 || ( type == '1' && str. indexOf ( tip) + 1 ) ) == this . checked || this . click ( ) ;
}
} ) . each ( function ( ) {
if ( ! /^A?B?C?D?E?F?G?$/ . test ( opt) ) return false ;
Boolean ( opt. match ( this . value) ) == this . checked || this . click ( ) ;
} ) ;
if ( type. match ( /^[013]$/ ) ) {
$input. is ( ':checked' ) || ( setting. none ? ( $input[ Math. floor ( Math. random ( ) * $input. length) ] || $ ( ) ) . click ( ) : setting. lose++ ) ;
} else if ( type. match ( /^(2|[4-9]|1[08])$/ ) ) {
data = String ( obj. answer) . split ( /#|\x01|\|/ ) ;
str = $li. end ( ) . find ( 'textarea' ) . each ( function ( index) {
index = ( obj. code > 0 && data[ index] ) || '' ;
UE . getEditor ( this . name) . setContent ( index. trim ( ) ) ;
} ) . length;
( obj. code > 0 && data. length == str) || setting. none || setting. lose++ ;
} else {
setting. none || setting. lose++ ;
}
return state == setting. lose;
}
function saveThis ( ) {
if ( ! setting. auto) return setTimeout ( saveThis, setting. time) ;
setting. div. children ( 'button:lt(3)' ) . hide ( ) . eq ( 1 ) . click ( ) ;
_self. alert = console. log;
$ ( '#tempsave' ) . click ( ) ;
setting. regl ( ) ;
}
function submitThis ( ) {
if ( ! setting. auto) {
} else if ( ! $ ( '.Btn_blue_1:visible' ) . length) {
setting. div. children ( 'button:lt(3)' ) . hide ( ) . eq ( 1 ) . click ( ) ;
return setting. regl ( ) ;
} else if ( $ ( '#confirmSubWin:visible' ) . length) {
var btn = $ ( '#tipContent + * > a' ) . offset ( ) || { top: 0 , left: 0 } ,
mouse = document. createEvent ( 'MouseEvents' ) ;
btn = [ btn. left + Math. ceil ( Math. random ( ) * 46 ) , btn. top + Math. ceil ( Math. random ( ) * 26 ) ] ;
mouse. initMouseEvent ( 'click' , true , true , document. defaultView, 0 , 0 , 0 , btn[ 0 ] , btn[ 1 ] , false , false , false , false , 0 , null ) ;
_self. event = $. extend ( true , { } , mouse) ;
delete _self. event. isTrusted;
_self. form1submit ( ) ;
} else {
$ ( '.Btn_blue_1' ) [ 0 ] . click ( ) ;
}
setTimeout ( submitThis, Math. ceil ( setting. time * Math. random ( ) ) * 2 ) ;
}
function checkToNext ( ) {
var $tip = $ ( setting. job. join ( ', ' ) , document) . prevAll ( '.ans-job-icon' + setting. normal) ;
setInterval ( function ( ) {
$tip. parent ( ':not(.ans-job-finished)' ) . length || setting. jump && toNext ( ) ;
} , setting. time) ;
}
function toNext ( ) {
var $cur = $ ( '#cur' + $ ( '#chapterIdid' ) . val ( ) ) ,
$tip = $ ( 'span.currents ~ span' ) ,
sel = setting. review ? 'html' : '.blue' ;
if ( ! $cur. has ( sel) . length && $tip. length) return $tip. eq ( 0 ) . click ( ) ;
$tip = $ ( '.roundpointStudent, .roundpoint' ) . parent ( ) ;
$tip = $tip. slice ( $tip. index ( $cur) + 1 ) . not ( ':has(' + sel + ')' ) ;
$tip. not ( setting. lock ? ':has(.lock)' : 'html' ) . find ( 'span' ) . eq ( 0 ) . click ( ) ;
$tip. length || setting. course && switchCourse ( ) ;
}
function switchCourse ( ) {
GM_xmlhttpRequest ( {
method: 'GET' ,
url: '/visit/courses/study?isAjax=true&fileId=0&debug=' ,
headers: {
'Referer' : location. origin + '/visit/courses' ,
'X-Requested-With' : 'XMLHttpRequest'
} ,
onload: function ( xhr) {
var list = $ ( 'h3 a[target]' , xhr. responseText) . map ( function ( ) {
return $ ( this ) . attr ( 'href' ) ;
} ) ,
index = list. map ( function ( index) {
return this . match ( top. courseId) && index;
} ) . filter ( function ( ) {
return $. isNumeric ( this ) ;
} ) [ 0 ] + 1 || 0 ;
setting. course = list[ index] ? goCourse ( list[ index] ) : 0 ;
}
} ) ;
}
function goCourse ( url) {
GM_xmlhttpRequest ( {
method: 'GET' ,
url: url,
onload: function ( xhr) {
$. globalEval ( 'location.href = "' + $ ( '.articlename a[href]' , xhr. responseText) . attr ( 'href' ) + '";' ) ;
}
} ) ;
}
function autoRead ( ) {
$ ( 'html, body' ) . animate ( {
scrollTop: $ ( document) . height ( ) - $ ( window) . height ( )
} , Math. round ( setting. read) * 1E3 , function ( ) {
$ ( '.nodeItem.r i' ) . click ( ) ;
} ) . one ( 'click' , '#top' , function ( event) {
$ ( event. delegateTarget) . stop ( ) ;
} ) ;
}
function DisplayURL ( ) {
_self. WAY . box. hide ( ) ;
var $li = $ ( this ) . closest ( 'li' ) ;
$. get ( '/visit/goToCourseByFace' , {
courseId: $li. find ( 'input[name=courseId]' ) . val ( ) ,
clazzId: $li. find ( 'input[name=classId]' ) . val ( )
} , function ( data) {
$li. find ( '[onclick^=openFaceTip]' ) . removeAttr ( 'onclick' ) . attr ( {
target: '_blank' ,
href: $ ( data) . filter ( 'script:last' ) . text ( ) . match ( /n\("(.+?)"/ ) [ 1 ]
} ) ;
alert ( '本课程已临时解除面部识别' ) ;
} , 'html' ) ;
}
function getSchoolId ( ) {
var school = /^1\d{10}$/ . test ( setting. username) ? '' : setting. school;
if ( ! isNaN ( school) ) return setTimeout ( toLogin, setting. time, school) ;
if ( school == '账号为手机号可以不修改此参数' ) return alert ( '请修改school参数' ) ;
$. getJSON ( '/org/searchUnis?filter=' + encodeURI ( school) + '&product=44' , function ( data) {
if ( ! data. result) return alert ( '学校查询错误' ) ;
var msg = $. grep ( data. froms, function ( value) {
return value. name == school;
} ) [ 0 ] ;
msg ? setTimeout ( toLogin, setting. time, msg. schoolid) : alert ( '学校名称不完整' ) ;
} ) ;
}
function toLogin ( fid) {
GM_xmlhttpRequest ( {
method: 'GET' ,
url: '/api/login?name=' + setting. username + '&pwd=' + setting. password + '&schoolid=' + fid + '&verify=0' ,
onload: function ( xhr) {
var obj = $. parseJSON ( xhr. responseText) || { } ;
obj. result ? location. href = decodeURIComponent ( $ ( '#ref, #refer_0x001' ) . val ( ) ) : alert ( obj. errorMsg || 'Error' ) ;
}
} ) ;
}
function submitAnswer ( $job, data) {
$job. removeClass ( 'ans-job-finished' ) ;
data = data. length ? $ ( data) : $ ( '.TiMu' ) . map ( function ( ) {
var title = filterImg ( $ ( '.Zy_TItle .clearfix' , this ) ) ;
return {
question: title. replace ( /^【.*?】\s*/ , '' ) ,
type: ( { 单选题: 0 , 多选题: 1 , 填空题: 2 , 判断题: 3 } ) [ title. match ( /^【(.*?)】|$/ ) [ 1 ] ]
} ;
} ) ;
data = $. grep ( data. map ( function ( index) {
var $TiMu = $ ( '.TiMu' ) . eq ( index) ;
if ( ! ( $. isPlainObject ( this ) && this . type < 4 && $TiMu. find ( '.fr' ) . length) ) {
return false ;
} else if ( this . type == 2 ) {
var $ans = $TiMu. find ( '.Py_tk, .Py_answer' ) . eq ( 0 ) ;
if ( ! $TiMu. find ( '.cuo' ) . length && this . code) {
return false ;
} else if ( ! $ans. find ( '.cuo' ) . length) {
this . option = $ans. find ( '.clearfix' ) . map ( function ( ) {
return $ ( this ) . text ( ) . trim ( ) ;
} ) . get ( ) . join ( '#' ) || '无' ;
} else if ( this . code) {
this . code = - 1 ;
} else {
return false ;
}
} else if ( this . type == 3 ) {
var ans = $TiMu. find ( '.font20:last' ) . text ( ) ;
if ( $TiMu. find ( '.cuo' ) . length) {
this . option = ( { '√' : '错误' , '×' : '正确' } ) [ ans] || '无' ;
} else if ( ! this . code) {
this . option = ( { '√' : '正确' , '×' : '错误' } ) [ ans] || '无' ;
} else {
return false ;
}
} else {
var text = $TiMu. find ( '.Py_answer > span:eq(0)' ) . text ( ) ;
if ( $TiMu. find ( '.dui' ) . length && this . code && ! /^A?B?C?D?E?F?G?$/ . test ( this . option) ) {
return false ;
} else if ( $TiMu. find ( '.dui' ) . length || text. match ( '正确答案' ) ) {
text = text. match ( /[A-G]/gi ) || [ ] ;
this . option = $. map ( text, function ( value) {
return filterImg ( $TiMu. find ( '.fl:contains(' + value + ') + a' ) ) ;
} ) . join ( '#' ) || '无' ;
this . key = text. join ( '' ) ;
} else if ( this . code) {
this . code = - 1 ;
} else {
return false ;
}
}
return this ;
} ) , function ( value) {
return value && value. option != '无' ;
} ) ;
setting. curs = $ ( 'script:contains(courseName)' , top. document) . text ( ) . match ( /courseName:\'(.+?)\'|$/ ) [ 1 ] || $ ( 'h1' ) . text ( ) . trim ( ) || '无';
data. length && GM_xmlhttpRequest ( {
method: 'POST' ,
url: 'http://mooc.forestpolice.org/upload/cx/' + ( setting. token || 0 ) + '/?workRelationId=' + $ ( '#workId' ) . val ( ) ,
headers: {
'Content-type' : 'application/x-www-form-urlencoded'
} ,
data: 'course=' + encodeURIComponent ( setting. curs) + '&data=' + encodeURIComponent ( ( Ext. encode || JSON . stringify) ( data) ) + '&id=' + $ ( '#jobid' ) . val ( ) . slice ( 5 )
} ) ;
$job. addClass ( 'ans-job-finished' ) ;
}
function filterImg ( dom) {
return $ ( dom) . clone ( ) . find ( 'img[src]' ) . replaceWith ( function ( ) {
return $ ( '
' ) . text ( '' ) ;
} ) . end ( ) . find ( 'iframe[src]' ) . replaceWith ( function ( ) {
return $ ( '
' ) . text ( '' ) ;
} ) . end ( ) . text ( ) . trim ( ) ;
}
CSDN净化版
var version = "2.1.8" ;
var currentURL = window. location. href;
var list;
( function ( ) {
'use strict' ;
l ( "CSDNGreener V" + version) ;
var blockURL = currentURL. split ( "/" ) . length;
var main = /(www\.csdn\.net\/)$/ ;
var article = /article/ ;
var bbs = /bbs\.csdn\.net/ ;
var blog = /blog\.csdn\.net/ ;
var blog2 = /\/article\/list\// ;
var download = /download\.csdn\.net/ ;
var login = /passport\.csdn\.net/ ;
var zone = /me\.csdn\.net/ ;
list = [ ] ;
put ( ".app-app" ) ;
put ( ".vip-caise" ) ;
common ( 6 , 1 ) ;
if ( main. test ( currentURL) ) {
l ( "正在优化主页体验..." ) ;
put ( ".banner-ad-box" ) ;
put ( ".slide-outer" ) ;
put ( ".csdn-side-toolbar" ) ;
put ( ".persion_article" ) ;
clean ( 10 ) ;
common ( 5 , 10 ) ;
loop ( 1 ) ;
} else if ( ( blog. test ( currentURL) && blockURL === 4 ) || blog2. test ( currentURL) ) {
l ( "正在优化个人博客主页体验..." ) ;
put ( ".mb8" ) ;
put ( "#kp_box_503" ) ;
clean ( 10 ) ;
common ( 5 , 10 ) ;
} else if ( article. test ( currentURL) ) {
l ( "正在优化阅读体验..." ) ;
put ( ".recommend-right" ) ;
put ( ".blog_tip_box" ) ;
put ( ".blog-expert-recommend-box" ) ;
put ( ".meau-gotop-box" ) ;
put ( ".mediav_ad" ) ;
put ( ".pulllog-box" ) ;
put ( ".recommend-ad-box" ) ;
put ( ".box-shadow" ) ;
put ( ".type_hot_word" ) ;
put ( ".fourth_column" ) ;
put ( ".right-item" ) ;
put ( "#asideFooter" ) ;
put ( "#ad-div" ) ;
put ( "#479" ) ;
put ( "#480" ) ;
put ( ".postTime" ) ;
put ( ".t0" ) ;
put ( ".shareSuggest" ) ;
put ( ".template-box" ) ;
put ( "div#dmp_ad_58" ) ;
put ( ".reward-user-box" ) ;
put ( ".to-reward" ) ;
put ( ".recommend-recommend-box" ) ;
put ( ".indexSuperise" ) ;
clean ( 10 ) ;
common ( 4 , 5 ) ;
common ( 1 , 30 ) ;
common ( 2 , 20 ) ;
common ( 8 , 1 ) ;
loop ( 2 ) ;
} else if ( bbs. test ( currentURL) ) {
l ( "正在优化论坛体验..." ) ;
put ( ".post_recommend" ) ;
put ( "#post_feed_wrap" ) ;
put ( ".bbs_feed_ad_box" ) ;
put ( ".recommend-ad-box" ) ;
put ( ".type_hot_word" ) ;
put ( ".pulllog-box" ) ;
put ( ".personalized-recommend-box" ) ;
put ( ".totast-box" ) ;
put ( ".recommend-right" ) ;
put ( ".ad_top" ) ;
clean ( 10 ) ;
common ( 3 , 50 ) ;
common ( 5 , 10 ) ;
} else if ( download. test ( currentURL) ) {
l ( "正在优化下载页体验..." ) ;
put ( ".fixed_dl" ) ;
put ( "indexSuperise" ) ;
clean ( 10 ) ;
common ( 5 , 10 ) ;
} else if ( login. test ( currentURL) ) {
l ( "正在优化登录页体验..." ) ;
put ( ".main-tu" ) ;
clean ( 10 ) ;
common ( 5 , 10 ) ;
} else if ( zone. test ( currentURL) ) {
l ( "正在优化个人空间体验..." ) ;
clean ( 10 ) ;
common ( 7 , 10 ) ;
common ( 5 , 10 ) ;
} else {
e ( "不受支持的页面!" ) ;
}
l ( "超级优化完毕。" ) ;
l ( "如果觉得好用,来 https://greasyfork.org/zh-CN/scripts/378351 收藏脚本来支持我吧!" ) ;
l ( "开源&&提建议:https://github.com/AdlerED/CSDNGreener" ) ;
l ( "我的博客:https://www.stackoverflow.wiki/" ) ;
l ( "我的微信:1101635162" ) ;
} ) ( ) ;
function l ( log) {
console. log ( "[CSDNGreener] " + log) ;
}
function e ( error) {
console. error ( "[CSDNGreener] " + error) ;
}
function clear ( ) {
list = [ ] ;
}
function put ( tag) {
list. push ( tag) ;
}
function clean ( times) {
var loop = setInterval ( function ( ) {
-- times;
if ( times <= 0 ) {
clearInterval ( loop) ;
}
/ * for ( var j = 0 ; j < list. length; j++ ) {
$ ( list[ j] ) . hide ( 1000 ) ;
}
setInterval ( function ( ) {
for ( var k = 0 ; k < list. length; k++ ) {
$ ( list[ k] ) . remove ( ) ;
}
} , 1000 ) ; * /
for ( var k = 0 ; k < list. length; k++ ) {
$ ( list[ k] ) . remove ( ) ;
}
} , 100 ) ;
}
function loop ( num) {
var did = false ;
setInterval ( function ( ) {
if ( num === 1 ) {
$ ( ".J_adv" ) . remove ( ) ;
$ ( ".feed-fix-box" ) . remove ( ) ;
if ( currentURL == "https://www.csdn.net/" ) {
$ ( "iframe" ) . remove ( ) ;
}
$ ( "li.clearfix" ) . each ( function ( index, ele) {
var banned = /csdn<\/a>/ ;
var aMark = $ ( ele) . find ( ".name" ) . html ( ) ;
if ( banned. test ( aMark) ) {
$ ( ele) . remove ( ) ;
}
} ) ;
} else if ( num === 2 ) {
$ ( "div.comment-list-box" ) . css ( "max-height" , "none" ) ;
if ( window. innerWidth < 1100 ) {
$ ( "article" ) . width ( window. innerWidth - 150 ) ;
did = true ;
} else {
if ( did === true ) {
$ ( "article" ) . removeAttr ( "style" ) ;
did = false ;
}
}
}
} , 500 ) ;
}
function common ( num, times) {
var loop = setInterval ( function ( ) {
-- times;
if ( times <= 0 ) {
clearInterval ( loop) ;
}
if ( num === 1 ) {
$ ( ".btn-readmore" ) . removeClass ( "no-login" ) ;
$ ( ".btn-readmore" ) . addClass ( "fans-read-more" ) ;
$ ( ".btn-readmore" ) . removeAttr ( "href" ) ;
$ ( ".btn-readmore" ) . removeAttr ( "target" ) ;
$ ( ".btn-readmore" ) . removeAttr ( "rel" ) ;
$ ( ".btn-readmore" ) . click ( ) ;
document. getElementById ( "btnMoreComment" ) . click ( ) ;
$ ( "#btnMoreComment" ) . parent ( "div.opt-box" ) . remove ( ) ;
$ ( "div.comment-list-box" ) . css ( "max-height" , "none" ) ;
$ ( ".login-mark" ) . remove ( ) ;
$ ( ".login-box" ) . remove ( ) ;
} else if ( num === 2 ) {
if ( $ ( ".recommend-box" ) . length > 1 ) {
$ ( ".recommend-box" ) [ 0 ] . remove ( ) ;
}
$ ( "#content_views" ) . off ( ) ;
$ ( "li[data-type='ad']" ) . remove ( ) ;
$ ( ".hljs-button" ) . removeClass ( "signin" ) ;
$ ( ".hljs-button" ) . addClass ( "{2}" ) ;
$ ( ".hljs-button" ) . attr ( "data-title" , "免登录复制" ) ;
$ ( "code" ) . attr ( "onclick" , "mdcp.copyCode(event)" ) ;
try {
Object. defineProperty ( window, "articleType" , {
value: 0 ,
writable: false ,
configurable: false
} ) ;
} catch ( err ) {
}
csdn. copyright. init ( "" , "" , "" ) ;
document. getElementsByClassName ( "column-advert-box" ) [ 0 ] . style. display= "none" ;
} else if ( num == 3 ) {
$ ( ".js_show_topic" ) . click ( ) ;
} else if ( num == 4 ) {
$ ( ".blog_container_aside" ) . hide ( ) ;
var screenWidth = document. body. clientWidth;
if ( screenWidth <= 1500 ) {
$ ( "main" ) . css ( "cssText" , "width:96% !important;" ) ;
} else {
$ ( "main" ) . css ( "cssText" , "width:100% !important;" ) ;
}
$ ( ".tool-box" ) . css ( "right" , "0px" ) ;
$ ( ".csdn-side-toolbar" ) . css ( "right" , "0px" ) ;
} else if ( num == 5 ) {
$ ( ".login-mark" ) . remove ( ) ;
$ ( ".login-box" ) . remove ( ) ;
} else if ( num == 6 ) {
var removeCookie = $. cookie ( "remove" ) ;
var remove;
if ( removeCookie == undefined) {
$. cookie ( 'remove' , true , {
path: '/'
} ) ;
remove = true ;
}
if ( removeCookie == "true" ) {
remove = true ;
} else {
remove = false ;
}
if ( remove) {
$ ( ".recommend-box" ) . hide ( ) ;
}
$ ( ".blog-content-box" ) . append ( "
" ) ;
if ( remove) {
$ ( "#switch" ) . append ( "显示推荐内容 " ) ;
} else {
$ ( "#switch" ) . append ( "隐藏推荐内容 " ) ;
}
renderHideButton ( ) ;
$ ( ".hide-recommend-button" ) . click ( function ( ) {
if ( $. cookie ( 'remove' ) == "true" ) {
$. cookie ( 'remove' , false , {
path: '/'
} ) ;
$ ( ".recommend-box" ) . slideDown ( 2000 ) ;
$ ( ".hide-recommend-button" ) . html ( "隐藏推荐内容" ) ;
} else {
$. cookie ( 'remove' , true , {
path: '/'
} ) ;
$ ( ".recommend-box" ) . slideUp ( 1000 ) ;
$ ( ".hide-recommend-button" ) . html ( "显示推荐内容" ) ;
}
renderHideButton ( ) ;
} ) ;
} else if ( num === 7 ) {
$ ( ".me_r" ) [ 1 ] . remove ( ) ;
} else if ( num === 8 ) {
$ ( ".article-bar-top" ) . append ( " " ) ;
$ ( ".article-bar-top" ) . append ( $ ( ".aside-box-footerClassify" ) . children ( "dd" ) . html ( ) ) ;
$ ( "dl" ) . each ( function ( index, element) {
var key = $ ( this ) . children ( "dt" ) ;
var value = $ ( this ) . children ( "dd" ) . children ( "span" ) ;
if ( key. html ( ) . indexOf ( "原创" ) != - 1 ) {
key = $ ( this ) . children ( "dt" ) . children ( "a" )
value = $ ( this ) . children ( "dd" ) . children ( "a" ) . children ( "span" ) ;
addInfo ( key, value) ;
} else
if ( value. html ( ) != undefined) {
addInfo ( key, value) ;
}
} ) ;
function addInfo ( key, value) {
var bind = key. html ( ) + " " + value. html ( ) + " " ;
$ ( ".article-bar-top" ) . append ( bind + " " ) ;
}
$ ( ".blog_container_aside" ) . remove ( ) ;
}
} , 100 ) ;
}
function renderHideButton ( ) {
$ ( ".hide-recommend-button" ) . css ( {
"width" : "270px" ,
"height" : "40px" ,
"border-width" : "0px" ,
"border-radius" : "3px" ,
"background" : "#F7F7F7" ,
"cursor" : "pointer" ,
"outline" : "none" ,
"font-family" : "Microsoft YaHei" ,
"color" : "rgba(15,15,15,0.6)" ,
"font-size" : "17px" ,
"display" : "block" ,
"margin" : "0 auto"
} ) ;
$ ( ".hide-recommend-button" ) . hover (
function ( ) {
$ ( ".hide-recommend-button" ) . css ( "background" , "#EEEEEE" ) ;
} , function ( ) {
$ ( ".hide-recommend-button" ) . css ( "background" , "#F7F7F7" ) ;
}
) ;
}
百度文库复制及下载
( function ( ) {
'use strict' ;
if ( ! $) {
var s = document. createElement ( "script" ) ;
s. src = "http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js" ;
s. async = false ;
document. documentElement. appendChild ( s) ;
}
let timeoutId = - 1 ;
let downloadBtn = '' ;
let toEmailBtn = '' ;
let toastDiv = '
' ;
let opacity = '0.95' ;
let ua = navigator. userAgent;
if ( ua. indexOf ( "Edge" ) >= 0 ) {
opacity = '0.6' ;
}
else if ( ua. indexOf ( "Chrome" ) ) {
opacity = '0.95' ;
}
let textBlockDiv = '+ opacity
+ ');-webkit-backdrop-filter: blur(20px);display: flex;justify-content:center;align-items:center;">
"' ;
let dialogA = '' ;
function Copy ( str) {
let result = false ;
let save = function ( e) {
e. clipboardData. setData ( 'text/plain' , str) ;
e. preventDefault ( ) ;
}
document. addEventListener ( 'copy' , save) ;
result = document. execCommand ( 'copy' ) ;
document. removeEventListener ( 'copy' , save) ;
return result;
}
function ShowToast ( str) {
if ( timeoutId >= 0 ) {
clearTimeout ( timeoutId) ;
}
$ ( '#page-toast-div' ) . remove ( ) ;
$ ( 'body' ) . append ( toastDiv) ;
$ ( '#page-toast-span' ) . text ( str) ;
timeoutId= setTimeout ( "$('#page-toast-div').remove();" , 1500 ) ;
}
function ShowTextBlock ( str) {
$ ( '#page-textblock-div' ) . remove ( ) ;
$ ( 'body' ) . append ( textBlockDiv) ;
$ ( '#page-textblock' ) . text ( str) ;
$ ( '#page-textblock-cancel-layer' ) . click ( function ( ) {
$ ( '#page-textblock-div' ) . remove ( ) ;
} ) ;
}
function PrependButtonTo ( ele) {
ele. prepend ( downloadBtn) ;
ele. prepend ( toEmailBtn) ;
$ ( 'body' ) . append ( dialogA) ;
$ ( 'body' ) . find ( '#dialogTpl' ) . hide ( ) ;
ele. find ( '#reader-copy-text' ) . click ( function ( ) {
let str = "" ;
let parent = $ ( this ) . parent ( ) . parent ( ) ;
parent. find ( '.reader-word-layer' ) . each ( function ( ) {
str += this . innerText. replace ( /\u2002/g , ' ' ) ;
} ) ;
str = str. replace ( /。\s/g , '。\r\n' ) ;
let result= ( str. length > 0 ) ;
if ( result) {
ShowToast ( "解析成功" ) ;
ShowTextBlock ( str) ;
} else {
ShowToast ( "解析失败,请等待网页加载" ) ;
}
} ) ;
$ ( 'body' ) . find ( '#getYuan' ) . click ( function ( ) {
window. location. href = "https://item.taobao.com/item.htm?ft=t&id=611495553516" ;
$ ( '#dialogTpl' ) . hide ( ) ;
} ) ;
$ ( 'body' ) . find ( '#getEmail' ) . click ( function ( ) {
Copy ( '467897369@qq.com' ) ;
$ ( '#dialogTpl' ) . hide ( ) ;
ShowToast ( "邮箱复制成功,现在可以发邮件了!" ) ;
} ) ;
ele. find ( '#reader-copy-toemail' ) . click ( function ( ) {
$ ( '#dialogTpl' ) . show ( ) ;
} ) ;
$ ( 'body' ) . find ( '#closeBtn' ) . click ( function ( ) {
$ ( '#dialogTpl' ) . hide ( ) ;
} ) ;
}
$ ( document) . ready ( function ( ) {
$ ( '.mod.reader-page.complex, .ppt-page-item, .mod.reader-page-mod.complex' ) . each ( function ( ) {
PrependButtonTo ( $ ( this ) ) ;
} ) ;
} ) ;
} ) ( ) ;