Greasy Fork is available in English.
模仿googlecode的看帖模式
// ==UserScript== // @name Baidu Tieba快速浏览帖子 // @namespace http://tieba.baidu.com/f?kw=chrome // @description 模仿googlecode的看帖模式 // @include http://tieba.baidu.com/f*kw=* // @include http://tieba.baidu.com/p/* // @version 14.04.22 // @grant GM_addStyle // ==/UserScript== function resize(a,b,c,d,ele1,ele2,doc){ var e=doc.documentElement; ele1.style.left=a+'px'; ele1.style.top=b+'px'; ele2.style.width=e.offsetWidth-a-d+'px'; ele1.style.height=e.offsetHeight-b-c-10+'px'; ele2.style.height=ele1.clientHeight-21+'px' } function sc(a1,b1,c1,d1){ var e1=a1.classList; if (e1.contains('soc')){ b1.preventDefault(); c1.click() } else { e1.add('soc'); if (d1) d1() } } function rfc(ele1,ele2,doc){ /*resize后面括号中前四个数字分别为小窗口与浏览器窗口左侧 顶端 下端以及右侧的距离,请自行替换调整相应数值来获取最佳效果*/ var ref=document.getElementById('tab_forumname')||parent.document.getElementById('tab_forumname'), left; if(ref){ var refl=ref.offsetLeft, refw=ref.offsetWidth; left=refl+refw>95?refl+refw:95 } else left=95; resize(left,85,83,10,ele1,ele2,doc) } function w(ele1,ele2,doc){ var m=ele1.classList.contains('ms'); if (!m) resize(2,2,0,10,ele1,ele2,doc); else rfc(ele1,ele2,doc); ele1.classList.toggle('ms') } function removecl(ele,cl){ if (ele.classList.contains(cl)) ele.classList.remove(cl) } var script=document.createElement('script'), code=document.createTextNode('if(!PageData.user.is_login)\n\tPageData.user.is_login=true'); script.type='text/javascript'; script.appendChild(code); document.body.appendChild(script); if (window.location.href.indexOf('http://tieba.baidu.com/f?')==0){ var floatkj=document.createElement('div'), pgn, idf=function(x){ return document.getElementById(x) }; floatkj.id='floatdiv'; floatkj.style.visibility='hidden'; floatkj.style.opacity='1'; floatkj.innerHTML='<div id="rq1" align="right" title="按ESC键终止载入,F5键刷新,M键切换窗口大小,Z键聚焦框架,X键聚焦窗口,小键盘4和6键分别向前后翻页">\ <form id="tielistfm" name="tielistfm" style="float:left;margin-left:5px">\ <select id="tielistsel" name="tielistsel" title="按S键切换帖子列表展开/收拢,执行选择按回车键(鼠标操作需点击展开列表)">\ </select>\ </form>\ <img id="first" src="https://ssl.gstatic.com/codesite/ph/images/pagination-first.png" alt="第一帖(F键)"/>\ <img id="previous" src="https://ssl.gstatic.com/codesite/ph/images/pagination-prev.png" alt="上一帖(P键)"/>\ <img id="next" src="https://ssl.gstatic.com/codesite/ph/images/pagination-next.png" alt="下一帖(N键)"/>\ <img id="last" src="https://ssl.gstatic.com/codesite/ph/images/pagination-last.png" alt="最后一帖(L键)"/>\ <img id="kjclosebtn" src="https://ssl.gstatic.com/codesite/ph/images/close_icon.png" title="关闭(ESC键)" alt="关闭(ESC键)"/>\ </div>\ <iframe name="myifrm" id="kjfrm" scrolling="yes" frameborder="0" style="overflow:auto">\ </iframe>'; document.body.appendChild(floatkj); GM_addStyle('#floatdiv{background-color:rgb(255,255,255);width:auto;height:auto;border:outset 3px rgba(30,144,255,0.7);border-radius:5px;box-shadow:0px 0px 0px 4px rgba(128,128,128,0.7);z-index:10010}\ #floatdiv,#tielistsel{position:fixed}\ #rq1{background-image:linear-gradient(to bottom,rgb(6,76,107),rgb(0,67,90));background-color:rgb(6,76,107)}\ #rq1>img{width:16px;height:16px;margin-left:5px;cursor:pointer}\ #first{margin-left:0}\ #tielistsel{-moz-appearance:none!important;background:none;background-color:rgba(255,255,255,0.7);color:rgba(0,0,0,0.9)}\ #tielistsel>option{background-color:rgba(0,0,0,0.7);color:rgb(255,255,255)}\ div.threadlist_rep_num{cursor: pointer !important}'); var sylj=document.querySelectorAll('a.j_th_tit'), loc=location.href, ljArray=[], update=function(){ if(document.querySelectorAll('a.j_th_tit').length>sylj.length||location.href!=loc){ sylj=document.querySelectorAll('a.j_th_tit'); loc=location.href; if(location.href!=loc) ljArray=[]; return true } else return false }, tiefmsel=document.tielistfm.tielistsel, makeSel=function(lj){ var tielistnames='', tiename=Array.prototype.reduce.call(lj,function(a,b,c){ var tn=c+1, tnt=tn<10?'0'+tn:tn; tielistnames+='<option>' +tnt +' ' +b.innerHTML +' ' +b.parentNode.parentNode.parentNode.parentNode.querySelector("div.threadlist_rep_num").innerHTML +'回复 BY ' +b.parentNode.nextElementSibling.firstElementChild.title.split(':')[1].trim() +'</option>'; return tielistnames },tielistnames); tiefmsel.innerHTML=tiename; tiefmsel.selectedIndex=pgn?pgn:0 }; makeSel(sylj); function addListener(lj){ Array.prototype.forEach.call(lj,function(link,index){ if(ljArray.indexOf(link)>-1) return; ljArray.push(link); var scutdiv=link.parentNode.parentNode.parentNode.parentNode.querySelector('div.threadlist_rep_num'); var timer = null; scutdiv.addEventListener('mouseover',function(){ clearTimeout(timer); timer = setTimeout(function(){ if (kj.src==link.href) return; if (floatkj.style.visibility!='visible') floatkj.style.visibility='visible'; if (floatkj.classList.contains('ms')){ rfc(floatkj,kj,document); floatkj.classList.remove('ms') } if(floatkj.style.opacity=='0.3') floatkj.style.opacity='1'; removecl(floatkj,'soc'); kj.src=link.href; tiefmsel.selectedIndex=pgn=index; panp() }, 1000); },false); scutdiv.addEventListener('mouseout',function(){clearTimeout(timer);},false); }) } addListener(sylj); function check(c){ if (c<0) c=sylj.length-1; else if (c==sylj.length) c=0; return c } function page(n){ removecl(floatkj,'soc'); kj.src=n.name; switch (n){ case ljf: pgn=0; break; case ljp: pgn=check(pgn-1); break; case ljn: pgn=check(pgn+1); break; case ljl: pgn=sylj.length-1; break } panp(); tiefmsel.selectedIndex=pgn } function closefrm(){ if (floatkj.style.visibility=='hidden') return; kj.src=''; floatkj.style.visibility='hidden' } var kj=idf('kjfrm'), gbkj=idf('kjclosebtn'), chkxsh=document.querySelector('.wrap1'), ljf=idf('first'), ljl=idf('last'), ljp=idf('previous'), ljn=idf('next'); function iw(){ kj.contentWindow.focus() } kj.addEventListener('load',function(){ if (!floatkj.classList.contains('soc')) floatkj.classList.add('soc'); this.contentWindow.focus() },false); rfc(floatkj,kj,document); function panpage(btn,idx,ct1,ct2){ btn.title=ct1+'一帖:'+sylj[idx].title+ct2+"键)"; btn.name=sylj[idx].href } panpage(ljf,0,'第','(F'); panpage(ljl,sylj.length-1,'最后','(L'); function panp(){ panpage(ljp,check(pgn-1),'上','(P'); panpage(ljn,check(pgn+1),'下','(N'); panpage(ljl,sylj.length-1,'最后','(L') } Array.prototype.forEach.call([gbkj,chkxsh,ljf,ljl,ljp,ljn],function(a){ if (a==gbkj || a==chkxsh) a.addEventListener('click',closefrm,false); else a.addEventListener('click',function(){ page(this) },false) }); tiefmsel.addEventListener('change',function(){ if (!this.size){ pgn=this.selectedIndex; removecl(floatkj,'soc'); kj.src=sylj[pgn]; panp(); this.blur() } },false); tiefmsel.addEventListener('blur',function(){ if (this.size){ this.size=0; this.selectedIndex=pgn } iw() },false); document.addEventListener('keydown',function(e){ function selcol(evt){ var et=evt.target, colact=function(){ et.size=0; et.blur() }; if (et==tiefmsel) pgn=et.selectedIndex; if (kj.src==sylj[pgn]){ colact(); return } removecl(floatkj,'soc'); kj.src=sylj[pgn]; panp(); colact() } if (floatkj.style.visibility=='visible') if (e.target.tagName.toLowerCase()!='input' && !e.target.hasAttribute('contenteditable')) switch (e.keyCode){ case 70: ljf.click(); break; case 80: ljp.click(); break; case 78: ljn.click(); break; case 76: ljl.click(); break; case 27: sc(floatkj,e,gbkj,iw); break; case 83: if(e.target==tiefmsel)e.target.blur(); break; case 13: selcol(e); break; case 77: w(floatkj,kj,document);iw(); break; case 90: if(floatkj.style.opacity=='0.3')floatkj.style.opacity='1';iw(); break } },false); setInterval(function(){ if(update()){ makeSel(sylj); addListener(sylj); panp(); } },3000) } else if (window.top!=window.self){ var id=function(x){ return parent.document.getElementById(x) }, a=document.querySelector('span.tP'), changeFocus=function(){ var a=navigator.userAgent, b=/Chrome/, c=/Firefox/; if(id('floatdiv').style.opacity=='1') id('floatdiv').style.opacity='0.3'; if (b.test(a)) window.parent.focus(); else if (c.test(a)) parent.document.documentElement.focus() }; document.addEventListener('keydown',function(e){ var pd=parent.document; if (e.target.tagName.toLowerCase()!='input' && !e.target.hasAttribute('contenteditable')) switch (e.keyCode){ case 70: id('first').click(); break; case 80: id('previous').click(); break; case 78: id('next').click(); break; case 76: id('last').click(); break; case 83: var tielistsel=id('tielistsel');tielistsel.size=pd.querySelectorAll('a.j_th_tit').length>20?20:pd.querySelectorAll('a.j_th_tit').length;tielistsel.focus(); break; case 77: w(id('floatdiv'),id('kjfrm'),pd); break; case 116: removecl(id('floatdiv'),'soc');window.location.reload();e.preventDefault(); break; case 27: sc(id('floatdiv'),e,id('kjclosebtn'));if (/Firefox/.test(navigator.userAgent) && pd.hasFocus(id('kjfrm')))id('kjfrm').blur(); break; case 100: if (a && a.previousElementSibling){ removecl(id('floatdiv'),'soc'); a.previousElementSibling.click() } break; case 102: if (a && a.nextElementSibling){ removecl(id('floatdiv'),'soc'); a.nextElementSibling.click() } break; case 88: changeFocus(); break } },false) }