返回列表 发帖
那么期待明天的进展~
看出这个插件很BT了
Falzon 发表于 2010-2-23 15:42 http://bbs.ioage.com/cn/images/common/back.gif


可能吧 ....我也今天刚玩   一开始摸不着头脑  以为键盘坏了

TOP

我以为是新版本呢,刚高兴着呢,闹了半天原来……

TOP

呼叫JYM  我要你的支援

TOP

不明真相的群众路过

TOP

不明真相的群众路过
april 发表于 2010-2-24 09:15 http://bbs.ioage.com/cn/images/common/back.gif


哇 BZ亲临本贴  沾光沾光

TOP

提示: 作者被禁止或删除 内容自动屏蔽

G430A@Win7+IE10+Norton360+TW6

TOP

提示: 作者被禁止或删除 内容自动屏蔽
http://valid.canardpc.com/cache/banner/2854499.png
新浪/腾讯/饭否@小蛐蛐   twitter @jiayiming
如有过滤规则需要更新,请尽量原帖反馈提醒。

TOP

今天刚使用了这个插件,功能非常强大,不负“装C必备”之名,不过使用过程中发现个小问题,虽无伤大雅,不过还是反馈一下。

我的快捷键配置如下图所示 ,左方向键切换到左侧标签,右方向键切换到右侧标签

当由一个标签使用快捷键切换到左侧标签时,切换的同时会使目标标签向前翻页;
同样的,使用快捷键切换到右侧标签时,切换的同时会使目标标签向后翻页。
例如,现有三个标签1,2,3

标签2中主题分三页,当前显示的是第2页,

当由标签1切换到标签2时,标签2显示的内容会自动翻到第三页;
当由标签3切换到标签2时,标签2显示的内容会自动翻到第一页。

这个情况会让用户在浏览论坛是遇到困扰,希望楼主能更新一下,
附件: 您需要登录才可以下载或查看附件。没有帐号?加入 我们
生而知之者,上也;学而知之者,次也;困而学之,又其次也;困而不学,民斯为下矣。

TOP

本帖最后由 jfjj007 于 2010-3-7 17:41 编辑
今天刚使用了这个插件,功能非常强大,不负“装C必备”之名,不过使用过程中发现个小问题,虽无伤大雅,不过还是反馈一下。

我的快捷键配置如下图所示 ,左方向键切换到左侧标签,右方向键切换到右侧标签
91197
...
032026 发表于 2010-3-7 13:03 http://bbs.ioage.com/cn/images/common/back.gif


可能跟默认快捷键有关系
开发者虽然说能覆盖默认的快捷键  可能他疏忽了吧  建议联系http://goo.gl/xNNv

还有默认情况下  不装扩展 左右键就是翻页用的  DZ下测试
附件: 您需要登录才可以下载或查看附件。没有帐号?加入 我们

TOP

本帖最后由 侈吻 于 2010-4-3 05:45 编辑

我分享兼提问
应为我是完全不懂js这种深奥的东东的,所以这个站内搜索是从opera那抠来的,结果居然能用。。。
  1. javascript:var t=window.location.hostname;var s=prompt('Google site search - enter search string:','');if(s){if(s.match(/^d\s.+/)){s=s.substring(2,s.length);t=t.match(/[^\.]+\.\w{2,4}$/)+''};void(location.href='http://www.google.com/search?q=site:'+t+'+'+s+'&sourceid=opera&num=100&hl=zh-CN')}
复制代码

我的问题就是,有没有高手能把多余的代码去掉啊?虽然不去掉其实也莫有影响来的。。
然后是我收集的一些小书签。。。

跳出新视窗显示当前页面的所有图像
  1. javascript:outText='';for(i=0;i<document.images.length;i++){if(outText.indexOf(document.images[i].src)==-1){outText+='<tr><td><img%20src='+document.images[i].src+'%20/></td></tr>'}};if(outText!=''){imgWindow=window.open('','imgWin','width=800,height=600');imgWindow.document.write%20('<table%20border=1%20cellpadding=10>'+outText+'</table>');imgWindow.document.close()}else{alert('No%20images!')}
复制代码


新建一个标签来显示所选内容
  1. javascript:(function(){ var d=open().document; d.title="Selection"; if (window.getSelection) { /*Moz*/ var s = getSelection(); for(i=0; i<s.rangeCount; ++i) { var a, r = s.getRangeAt(i); if (!r.collapsed) { var x = document.createElement("div"); x.appendChild(r.cloneContents()); if (d.importNode) x = d.importNode(x, true); d.body.appendChild(x); } } } else { /*IE*/ d.body.innerHTML = document.selection.createRange().htmlText; } })();
复制代码


在网页中按字母顺序排表
  1. javascript:function toArray (c){var a, k;a=new Array;for (k=0; k<c.length; ++k)a[k]=c[k];return a;}function insAtTop(par,child){if(par.childNodes.length) par.insertBefore(child, par.childNodes[0]);else par.appendChild(child);}function countCols(tab){var nCols, i;nCols=0;for(i=0;i<tab.rows.length;++i)if(tab.rows[i].cells.length>nCols)nCols=tab.rows[i].cells.length;return nCols;}function makeHeaderLink(tableNo, colNo, ord){var link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord>0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i<nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length) alert("This page doesn't contain any tables.");(function(){var j, thead;for(j=0;j<g_tables.length;++j){thead=g_tables[j].createTHead();insAtTop(thead, makeHeader(j,countCols(g_tables[j])))}}) ();function compareRows(a,b){if(a.sortKey==b.sortKey)return 0;return (a.sortKey < b.sortKey) ? g_order : -g_order;}function sortTable(tableNo, colNo, ord){var table, rows, nR, bs, i, j, temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new Array();nR=0;bs=table.tBodies;for(i=0; i<bs.length; ++i)for(j=0; j<bs[i].rows.length; ++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp) rows[nR].sortKey=temp.innerHTML;else rows[nR].sortKey="";++nR;}rows.sort(compareRows);for (i=0; i < rows.length; ++i)insAtTop(table.tBodies[0], rows[i]);}
复制代码


消除了大部分非文本元素而显示文字
  1. javascript:(function(){var D=document,e,styles="table,thead,tbody,tr,th,td{display:block!important;}*{width:auto!important;height:auto!important;position:static!important;float:none!important;margin-left:0!important;margin-right:0!important;} img,iframe,embed,object{display:none;} body {margin:4px!important;}"; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? "javascript:'"+styles+"'" : "data:text/css,"+styles; D.getElementsByTagName("head")[0].appendChild(e)})()
复制代码


让一个网页看起来像在PDA上
  1. javascript:var s=document.createElement('link');s.setAttribute('href','http://www.ressukka.net/misc/pdaize.css');s.setAttribute('rel','stylesheet');s.setAttribute('type','text/css'); document.getElementsByTagName('head')[0].appendChild(s);var l=document.getElementsByTagName('img');for(var i=0;il.length;i++){if(l[i].width>176){l[i].height*=176/l[i].width;l[i].width=176}else if(l[i].naturalWidth>176){var e=176/l[i].naturalWidth;l[i].height=l[i].naturalHeight*e;l[i].width=176;}}void(0);
复制代码


直接在浏览器中编辑当前页面
  1. javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0
复制代码


网页调亮
  1. javascript:(function(){function RGBtoHSL(RGBColor){with(Math){var R,G,B;var cMax,cMin;var sum,diff;var Rdelta,Gdelta,Bdelta;var H,L,S;R=RGBColor[0];G=RGBColor[1];B=RGBColor[2];cMax=max(max(R,G),B);cMin=min(min(R,G),B);sum=cMax+cMin;diff=cMax-cMin;L=sum/2;if(cMax==cMin){S=0;H=0;}else{if(L<=(1/2))S=diff/sum;else S=diff/(2-sum);Rdelta=R/6/diff;Gdelta=G/6/diff;Bdelta=B/6/diff;if(R==cMax)H=Gdelta-Bdelta;else if(G==cMax)H=(1/3)+Bdelta-Rdelta;else H=(2/3)+Rdelta-Gdelta;if(H<0)H+=1;if(H>1)H-=1;}return[H,S,L];}}function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;}function hslToCSS(hsl){return "hsl("+Math.round(hsl[0]*360)+", "+Math.round(hsl[1]*100)+"%, "+Math.round(hsl[2]*100)+"%)";}var props=["color","background-color","border-left-color","border-right-color","border-top-color","border-bottom-color"];var props2=["color","backgroundColor","borderLeftColor","borderRightColor","borderTopColor","borderBottomColor"];if(typeof getRGBColor(document.documentElement,"background-color")=="string")document.documentElement.style.backgroundColor="white";revl(document.documentElement);function revl(n){var i,x,color,hsl;if(n.nodeType==Node.ELEMENT_NODE){for(i=0;x=n.childNodes[i];++i)revl(x);for(i=0;x=props[i];++i){color=getRGBColor(n,x);if(typeof(color)!="string"){hsl=RGBtoHSL(color);hsl[2] = Math.pow(hsl[2], 5/6);n.style[props2[i]]=hslToCSS(hsl);}}}}})()
复制代码


网页调暗
  1. javascript:(function(){function RGBtoHSL(RGBColor){with(Math){var R,G,B;var cMax,cMin;var sum,diff;var Rdelta,Gdelta,Bdelta;var H,L,S;R=RGBColor[0];G=RGBColor[1];B=RGBColor[2];cMax=max(max(R,G),B);cMin=min(min(R,G),B);sum=cMax+cMin;diff=cMax-cMin;L=sum/2;if(cMax==cMin){S=0;H=0;}else{if(L<=(1/2))S=diff/sum;else S=diff/(2-sum);Rdelta=R/6/diff;Gdelta=G/6/diff;Bdelta=B/6/diff;if(R==cMax)H=Gdelta-Bdelta;else if(G==cMax)H=(1/3)+Bdelta-Rdelta;else H=(2/3)+Rdelta-Gdelta;if(H<0)H+=1;if(H>1)H-=1;}return[H,S,L];}}function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;}function hslToCSS(hsl){return "hsl("+Math.round(hsl[0]*360)+", "+Math.round(hsl[1]*100)+"%, "+Math.round(hsl[2]*100)+"%)";}var props=["color","background-color","border-left-color","border-right-color","border-top-color","border-bottom-color"];var props2=["color","backgroundColor","borderLeftColor","borderRightColor","borderTopColor","borderBottomColor"];if(typeof getRGBColor(document.documentElement,"background-color")=="string")document.documentElement.style.backgroundColor="white";revl(document.documentElement);function revl(n){var i,x,color,hsl;if(n.nodeType==Node.ELEMENT_NODE){for(i=0;x=n.childNodes[i];++i)revl(x);for(i=0;x=props[i];++i){color=getRGBColor(n,x);if(typeof(color)!="string"){hsl=RGBtoHSL(color);hsl[2] = Math.pow(hsl[2], 6/5);n.style[props2[i]]=hslToCSS(hsl);}}}}})()
复制代码


网页颜色反相(浅变暗,暗变浅,感觉这个比上面两个方便)
  1. javascript:(function(){function RGBtoHSL(RGBColor){with(Math){var R,G,B;var cMax,cMin;var sum,diff;var Rdelta,Gdelta,Bdelta;var H,L,S;R=RGBColor[0];G=RGBColor[1];B=RGBColor[2];cMax=max(max(R,G),B);cMin=min(min(R,G),B);sum=cMax+cMin;diff=cMax-cMin;L=sum/2;if(cMax==cMin){S=0;H=0;}else{if(L<=(1/2))S=diff/sum;else S=diff/(2-sum);Rdelta=R/6/diff;Gdelta=G/6/diff;Bdelta=B/6/diff;if(R==cMax)H=Gdelta-Bdelta;else if(G==cMax)H=(1/3)+Bdelta-Rdelta;else H=(2/3)+Rdelta-Gdelta;if(H<0)H+=1;if(H>1)H-=1;}return[H,S,L];}}function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;}function hslToCSS(hsl){return "hsl("+Math.round(hsl[0]*360)+", "+Math.round(hsl[1]*100)+"%, "+Math.round(hsl[2]*100)+"%)";}var props=["color","background-color","border-left-color","border-right-color","border-top-color","border-bottom-color"];var props2=["color","backgroundColor","borderLeftColor","borderRightColor","borderTopColor","borderBottomColor"];if(typeof getRGBColor(document.documentElement,"background-color")=="string")document.documentElement.style.backgroundColor="white";revl(document.documentElement);function revl(n){var i,x,color,hsl;if(n.nodeType==Node.ELEMENT_NODE){for(i=0;x=n.childNodes[i];++i)revl(x);for(i=0;x=props[i];++i){color=getRGBColor(n,x);if(typeof(color)!="string"){hsl=RGBtoHSL(color);hsl[2]=1-hsl[2];n.style[props2[i]]=hslToCSS(hsl);}}}}})()
复制代码


edit styles(这还需要说明么?- -)
  1. javascript:(function(){function init(){var newline=unescape(%22%%22+%220A%22),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value=%22/* Type CSS rules here and they will be applied%22+newline+%22to pages from '%22+location.host+%22'%22+newline+%22immediately as long as you keep this window open. */%22+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:%22Imported%22,inline:false,shorturl:%22%22,fulltext:%22%22};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+%22-tag%22;if(!s.ownerNode.getAttribute(%22src%22)&&!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=%22Inline %22+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==%22data:text/css%22){y.shorturl=%22 contained in a data: URL%22;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=%22@import \%22%22+s.href+%22\%22;%22;y.shorturl=%22 %22+s.href.split('/').reverse()[0];if(!y.readable){y.fulltext=%22/* Out-of-domain; imported above. */%22;}else if(s.href.substr(0,5)!=%22http:%22){y.fulltext=%22/* Non-http; imported above. */%22;}else{var loadingText=%22/* Loading (%22+(L.length-1)+%22) */%22;y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,%22%22);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,%22%22);};p.open(%22GET%22,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&&s.length>1)s=s.slice(1);while((s[s.length-1]==newline)&&s.length>1)s=s.substr(0,s.length-1);s=s.replace(/@import.*;/ig,function(){return %22/* %22+RegExp.lastMatch+%22 */%22;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=%22%22,main=%22%22;var firstNote=%22/**** Style sheets whose contents could be loaded were ****/%22+newline+%22/**** imported instead.  Rule order may be incorrect   ****/%22+newline+%22/**** as a result. ****/%22+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=%22/**** %22+ss.label+%22 style sheet%22+ss.shorturl+%22 ****/%22+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor=%22#ddd%22;return;}x.editStyles;}catch(er){ta.style.backgroundColor=%22#fdc%22;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=%22%22;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(%22style%22);newSS.type=%22text/css%22;x.document.getElementsByTagName(%22head%22)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open('','','resizable,scrollbars=yes,width=550,height=520');y.document.write('<title>Edit Styles</title><style>.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }</style><body class=%22ec%22><form name=%22f%22 style=%22margin: 0px;%22 class=%22ec%22><textarea name=%22ta%22 wrap=%22soft%22 style=%22margin: 0px; border: 0px; width:100%; height:100%;%22 class=%22ec%22></textarea><script>'+update+init+'init();<'+'/script>');y.document.close();})()
复制代码


另一款网址缩短(楼主提供滴是google的,问题怎么复制不了啊,so,这款是可以复制的,不过会跳到他们页面去,反正都有利有弊。)
  1. javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href)
复制代码


呼出Design工具栏(网页设计工具)
  1. javascript:function%20fnStartDesign(sUrl)%20{var%20nScript%20=%20document.createElement('script');nScript.setAttribute('language','JavaScript');nScript.setAttribute('src',sUrl);document.body.appendChild(nScript);}fnStartDesign('http://www.sprymedia.co.uk/design/design/media/js/design-loader.js');
复制代码


个人觉得很厉害的保存网址为pdf的小书签,在创建文件前会让你设置需要保存的内容,删除多余的信息。得到的文件可以下载或者把缩短的网址通过Email或twitter发送
  1. javascript:(function(){pfstyle='bk';_pnicer_script=document.createElement('SCRIPT');_pnicer_script.type='text/javascript';_pnicer_script.src='http://cdn.printfriendly.com/printfriendly.js?x='+(Math.random());document.getElementsByTagName('head')[0].appendChild(_pnicer_script);_pnicer_css=document.createElement('LINK');_pnicer_css.rel='stylesheet';_pnicer_css.href='http://cdn.printfriendly.com/printfriendly.css';_pnicer_css.type='text/css';_pnicer_css.media='screen';document.getElementsByTagName('head')[0].appendChild(_pnicer_css);})();
复制代码

TOP

本帖最后由 fly2never 于 2010-7-30 13:35 编辑

贡献一个自动跳转到下一页的 具体介绍看这里 http://bbs.ioage.com/cn/thread-157284-1-1.html
  1. (function() {
  2.     var checked = false;
  3.     var delay = false;
  4.     var next = {};
  5.     var previous = {};
  6.     // 下一页链接里的文字
  7.     next.texts      = [ 'next',
  8.                         'next page',
  9.                         'old',
  10.                         'older',
  11.                         'earlier',
  12.                         '下页',
  13.                         '下頁',
  14.                         '下一页',
  15.                         '下一頁',
  16.                         '后一页',
  17.                         '后一頁',
  18.                         '翻下页',
  19.                         '翻下頁',
  20.                         '后页',
  21.                         '后頁',
  22.                         '下翻',
  23.                         '下一个',
  24.                         '下一张',
  25.                         '下一幅',
  26.                         '下一节',
  27.                         '下一章',
  28.                         '下一篇',
  29.                         '后一章',
  30.                         '后一篇'
  31.                       ];
  32.     // 上一页链接里的文字
  33.     previous.texts  = [ 'previous',
  34.                         'prev',
  35.                         'previous page',
  36.                         'new',
  37.                         'newer',
  38.                         'later',
  39.                         '上页',
  40.                         '上頁',
  41.                         '上一页',
  42.                         '上一頁',
  43.                         '前一页',
  44.                         '前一頁',
  45.                         '翻上页',
  46.                         '翻上頁',
  47.                         '前页',
  48.                         '前頁',
  49.                         '上翻',
  50.                         '上一个',
  51.                         '上一张',
  52.                         '上一幅',
  53.                         '上一节',
  54.                         '上一章',
  55.                         '上一篇',
  56.                         '前一章',
  57.                         '前一篇'
  58.                       ];
  59.     // 可能会误判的关键词
  60.     next.miswords   = { "下一章": 30,
  61.                         "下一篇": 30,
  62.                         "后一章": 30,
  63.                         "后一篇": 30,
  64.                         "下一节": 30,
  65.                         ">>": 2000,
  66.                         "»": 2000
  67.                       }
  68.     previous.miswords = { "上一章": 30,
  69.                           "上一篇": 30,
  70.                           "前一章": 30,
  71.                           "前一篇": 30,
  72.                           "上一节": 30,
  73.                           "<<": 2000,
  74.                           "«": 2000
  75.                         }

  76.     // 最后添加一些论坛使用的翻页符号
  77.     next.texts.push(">>");
  78.     next.texts.push(">");
  79.     next.texts.push("»");
  80.     next.texts.push("›");
  81.     previous.texts.push("<<");
  82.     previous.texts.push("<");
  83.     previous.texts.push("«");
  84.     previous.texts.push("‹");

  85.     // 翻页文字的前面和后面可能包含的字符(正则表达式)
  86.     var preRegexp  = '(^\\s*(?:[<‹«]*|[>›»]*|[\\(\\[『「[【]?)\\s*)';
  87.     var nextRegexp = '(\\s*(?:[>›»]*|[\\)\\]』」]】]?)\\s*$)';

  88.     function checkLinks() {
  89.       var link, text, ldnc, lnc, ldpc, lpc, num, digCurFound, linkNumber, found, tmpNode;
  90.       var regexp = new RegExp();
  91.       // 查找相应的链接
  92.       var links = document.getElementsByTagName('A');
  93.       for (var i = 0; i < links.length; i++) {
  94.         link = links[i];

  95.         // 跳过不起作用的链接
  96.         if (!link.offsetParent || link.offsetWidth == 0 || link.offsetHeight == 0 || !link.hasAttribute("href") && !link.hasAttribute("onclick"))
  97.           continue;
  98.         // 跳过日历
  99.         if (/(?:^|\s)(?:monthlink|weekday|day|day[\-_]\S+)(?:\s|$)/i.test(link.className))
  100.           continue;

  101.         if (/^nextlink/i.test(link.id) || /^linknext/i.test(link.id) ||
  102.             /(^|\s)nextlink/i.test(link.className) || /(^|\s)linknext/i.test(link.className))
  103.           next.link = link;
  104.         if (/^prev(ious)?link/i.test(link.id) || /^linkprev(ious)?/i.test(link.id) ||
  105.             /(^|\s)prev(ious)?link/i.test(link.className) || /(^|\s)linkprev(ious)?/i.test(link.className))
  106.           previous.link = link;

  107.         text = link.textContent;
  108.         if (!text) {
  109.           // 若链接中没有文字,则检查图片的alt属性、链接或图片的title
  110.           for (var img in link.childNodes) {
  111.             if (img.localName == "IMG") {
  112.               text = img.alt || link.title || img.title;
  113.               if (text) break;
  114.             }
  115.           }
  116.           if (!text) continue;
  117.         }
  118.         text = text.toLowerCase().replace(/^\s+|\s+$/g, "");
  119.         if (!text) continue;

  120.         // 纯数字链接
  121.         if (isDigital(text)) {
  122.           if (digCurFound) continue;
  123.           linkNumber = parseInt(RegExp.$1);

  124.           // 检测下一个位置是否是当前页面的页数
  125.           if ((tmpNode = getCurrentPageNode(link, linkNumber, 1)) && tmpNode) {
  126.             digCurFound = true;
  127.             previous.link = link;
  128.             previous.found = true;
  129.             previous.pos = i;
  130.             // 再检测下下一个位置是否是“下一页”的链接
  131.             if (getNextLink(tmpNode, linkNumber+2, true))
  132.               break;
  133.             // 设置往后的30个位置以内为“下一页”的可能链接,以提高检测速度。
  134.             ldnc = i + 30;
  135.           }
  136.           // 检测上一个位置是否是当前页面的页数
  137.           else if (getCurrentPageNode(link, linkNumber, -1)) {
  138.             digCurFound = true;
  139.             next.link = link;
  140.             next.found = true;
  141.             next.pos = i;
  142.             ldpc = i + 30;
  143.             continue;
  144.           }
  145.           // 检测自身是否是当前页面的页数
  146.           else if (getCurrentPageNode(link, linkNumber, 0)) {
  147.             digCurFound = true;
  148.             // 再检测下一个位置是否是“下一页”的链接
  149.             if (getNextLink(link, linkNumber+1, true)) {
  150.               next.pos = i;
  151.               ldpc = i + 30;
  152.               continue;
  153.             }
  154.             // 设置往后的30个位置以内为“下一页”的可能链接,以提高检测速度。
  155.             ldnc = i + 30;
  156.           }
  157.           continue;
  158.         }
  159.         else {
  160.           found = false;
  161.           if (!next.found && !(lnc < i) && !(ldnc < i)) {
  162.             for (var j = 0; j < next.texts.length; j++) {
  163.               regexp.compile(preRegexp + next.texts[j] + nextRegexp, 'i');
  164.               if (regexp.test(text)) {
  165.                 // 检测到“下一页”的链接
  166.                 found = true;
  167.                 next.link = link;
  168.                 num = next.miswords[next.texts[j]];
  169.                 // 若“下一页”的词语有可能会误判时,最多再检测预定个数的链接。
  170.                 (num == null) ? next.found = true : lnc = i + num;
  171.                 break;
  172.               }
  173.             }
  174.           }
  175.           if (!next.digital && lnc < i) next.found = true;

  176.           if (!found && !previous.found && !(lpc < i) && !(ldpc < i)) {
  177.             for (var j = 0; j < previous.texts.length; j++) {
  178.               regexp.compile(preRegexp + previous.texts[j] + nextRegexp, 'i');
  179.               if (regexp.test(text)) {
  180.                 // 检测到“上一页”的链接
  181.                 previous.link = link;
  182.                 num = previous.miswords[previous.texts[j]];
  183.                 // 若“上一页”的词语有可能会误判时,最多再检测预定个数的链接。
  184.                 (num == null) ? previous.found = true : lpc = i + num;
  185.                 break;
  186.               }
  187.             }
  188.           }
  189.           if (lpc < i) previous.found = true;
  190.           // 重新设置纯数字链接未被检查
  191.           digCurFound = null;
  192.         }

  193.         // 找到“上一页”和“下一页”的链接或找到其中一个而另一个超过规定范围没找到,将不再查找。
  194.         if (next.found && previous.found ||
  195.             next.found && i > next.pos + 30 ||
  196.             previous.found && i > previous.pos + 30)
  197.           break;
  198.       }
  199.       // 通过以上方法没有找到“下一页”的,把第一次检测出来的数字1的链接作为当前页,2作为“下一页”。
  200.       if (!next.found /*&& !next.link*/ && next.digital)
  201.         next.link = next.digital;

  202.       if (next.link) next.found = true;
  203.       if (previous.link) previous.found = true;

  204.       if (!next.found && !previous.found)
  205.         checkButtons();
  206.     }

  207.     // 检查翻页按钮
  208.     function checkButtons() {
  209.       var but, text, found;
  210.       var regexp = new RegExp();
  211.       var buts = document.getElementsByTagName('INPUT');
  212.       for (var i = 0; i < buts.length; i++) {
  213.         but = buts[i];
  214.         if (but.hasAttribute("disabled") || !(/^button$/i.test(but.type) && but.getAttribute("onclick"))) continue;

  215.         text = but.value;
  216.         found = false;
  217.         if (!next.found) {
  218.           for (var j = 0; j < next.texts.length; j++) {
  219.             regexp.compile(preRegexp + next.texts[j] + nextRegexp, 'i');
  220.             if (regexp.test(text)) {
  221.               // 检测到“下一页”的按钮
  222.               next.link = but;
  223.               next.found = found = true;
  224.               break;
  225.             }
  226.           }
  227.         }

  228.         if (!found && !previous.found) {
  229.           for (var j = 0; j < previous.texts.length; j++) {
  230.             regexp.compile(preRegexp + previous.texts[j] + nextRegexp, 'i');
  231.             if (regexp.test(text)) {
  232.               // 检测到“上一页”的按钮
  233.               previous.link = but;
  234.               previous.found = true;
  235.               break;
  236.             }
  237.           }
  238.         }
  239.         if (next.found && previous.found) break;
  240.       }
  241.     }

  242.     // 取得相邻的纯数字节点,type: 1 下一个;-1 上一个
  243.     function getSiblingNode(node, type) {
  244.       if (!node) return null;
  245.       node = getSibling(node, type);
  246.       while (node && (node.nodeName == "#coment" ||
  247.             (/^\s*[\]]】]?[,\|]?\s*[\[[【]?\s*$/.test(node.textContent))))
  248.         node = getSibling(node, type);
  249.       return node;
  250.     }
  251.     function getSibling(aNode, type) {
  252.       if (!aNode) return null;
  253.       if (isOnlyNode(aNode)) {
  254.         try {
  255.           aNode = (type == 1 ? aNode.parentNode.nextSibling : aNode.parentNode.previousSibling);
  256.           if (skipNode(aNode))
  257.             aNode = (type == 1 ? aNode.nextSibling : aNode.previousSibling);
  258.           aNode = aNode.childNodes[0];
  259.           if (skipNode(aNode))
  260.             aNode = aNode.nextSibling;
  261.         }
  262.         catch (e) {return null;}
  263.       }
  264.       else {
  265.         aNode = (type == 1 ? aNode.nextSibling : aNode.previousSibling);
  266.       }
  267.       return aNode;
  268.     }
  269.     function isOnlyNode(n) {
  270.       return !n.nextSibling && !n.previousSibling ||
  271.              !n.nextSibling && skipNode(n.previousSibling) && !n.previousSibling.previousSibling ||
  272.              !n.previousSibling && skipNode(n.nextSibling) && !n.nextSibling.nextSibling ||
  273.              skipNode(n.previousSibling) && !n.previousSibling.previousSibling &&
  274.              skipNode(n.nextSibling) && !n.nextSibling.nextSibling;
  275.     }
  276.     function skipNode(sNode) {
  277.       return sNode && /*sNode.nodeName == "#text" &&*/ (/^\s*$/.test(sNode.textContent));
  278.     }

  279.     // 检测是否有下一页的纯数字链接,number:页数
  280.     function getNextLink(node, number, set) {
  281.       var tNode = getSiblingNode(node, 1);
  282.       if (tNode && tNode.nodeName == "A" && isDigital(tNode.textContent)) {
  283.         if (RegExp.$1 == number) {
  284.           // 找到纯数字链接
  285.           if (set) {
  286.             next.link = tNode;
  287.             next.found = true;
  288.           }
  289.           return tNode;
  290.         }
  291.       }
  292.       return null;
  293.     }

  294.     function isDigital(str, t) {
  295.       str = str.replace(/^\s+|\s+$/g, "");
  296.       if (t == -1)
  297.         str = str.split(/\s+/).pop();
  298.       else if (t == 1)
  299.         str = str.split(/\s+/)[0];
  300.       return (/^(\d+)$/.test(str)) ||
  301.              (/^\[\s?(\d+)\s?\]$/.test(str)) ||
  302.              (/^【\s?(\d+)\s?】$/.test(str)) ||
  303.              (/^[\s?(\d+)\s?]$/.test(str)) ||
  304.              (/^<\s?(\d+)\s?>$/.test(str));
  305.     }

  306.     // 判断是否是当前页面的数字,type:-1,0,1 分别是要判别的上一个、当前、下一个节点
  307.     function getCurrentPageNode(node, linkNum, type) {
  308.       var tNode;
  309.       if (type == 0) {
  310.         tNode = getSiblingNode(node, 1) || getSiblingNode(node, -1);
  311.         if (!tNode) return null;
  312.         if (!node.hasAttribute("onclick") && node.href != tNode.href &&
  313.             (!node.hasAttribute("href") && isDigital(node.textContent, type) ||
  314.             !(/\/#[^\/]+$/.test(node.href)) && node.href == location.href && isDigital(node.textContent, type))) {
  315.           if (linkNum > 0 && RegExp.$1 == linkNum) return node;
  316.         }
  317.         // 某些论坛处在第一页时,实际链接和当前页链接不符,只有和其余纯数字链接的结构或颜色不同时,
  318.         // 才使用纯数字的“2”作为“下一页”的链接。
  319.         else if (!next.digital && (/^\s*[\[[【]?1[\]]】]?\s*$/.test(node.textContent))) {
  320.           var two = getNextLink(node, 2);
  321.           if (two && difDigital(node, two))
  322.             next.digital = two;
  323.         }
  324.       }
  325.       else {
  326.         tNode = getSiblingNode(node, type);
  327.         if (!tNode) return null;
  328.         if (tNode.nodeName != "A" && isDigital(tNode.textContent, type) ||
  329.             tNode.nodeName == "A" && !tNode.hasAttribute("onclick") && node.href != tNode.href &&
  330.             (!tNode.hasAttribute("href") && isDigital(tNode.textContent, type) ||
  331.             !(/\/#[^\/]+$/.test(tNode.href)) && tNode.href == location.href && isDigital(tNode.textContent, type))) {
  332.           var n = linkNum + type;
  333.           if (n > 0 && RegExp.$1 == n) {
  334.             if (next.digital) next.digital = null;
  335.             return tNode;
  336.           }
  337.         }
  338.       }
  339.       return null;
  340.     }

  341.     function difDigital(node1, node2) {
  342.       if (getStructure(node1) == getStructure(node2) && getStyleColor(node1) == getStyleColor(node2))
  343.         return false;
  344.       return true;
  345.     }
  346.     function getStructure(aNode) {
  347.       return aNode.innerHTML.replace(/\d+/, "");
  348.     }
  349.     function getStyleColor(aNode) {
  350.       return document.defaultView.getComputedStyle(aNode, null).getPropertyValue("color");
  351.     }

  352.     function openLink(linkNode) {
  353.       if (!linkNode) return;
  354.       var hf = linkNode.getAttribute("href");
  355.       if (!linkNode.hasAttribute("onclick") && hf && !(/^#/.test(hf)) && linkNode.href != location.href) {
  356.         cleanVars();
  357.         location.assign(linkNode.href);
  358.       }
  359.       else {
  360.         // 有些4D鼠标摆动一下滚轮会触发多下的方向键,故增设一个延迟参数,使它只翻一页。
  361.         delay = true;
  362.         setTimeout(cleanVars, 300);
  363.         var e = document.createEvent("MouseEvents");
  364.         e.initMouseEvent("click", 1, 1, window, 1, 0,0,0,0,0,0,0,0,0, linkNode);
  365.         linkNode.dispatchEvent(e);
  366.       }
  367.     }
  368.     function cleanVars() {
  369.       try {
  370.         checked = false;
  371.         delay = false;
  372.         next.link = next.found = next.digital = null;
  373.         previous.link = previous.found = previous.digital = null;
  374.         delete next.pos;
  375.         delete previous.pos;
  376.       } catch(e) {}
  377.     }

  378.     // 检查过且没有发现上一页或下一页的连接,则退出
  379.     if (checked && !next.found && !previous.found)
  380.       return;

  381.     if (!checked) {
  382.       checkLinks();
  383.       checked = true;
  384.     }

  385.     openLink(next.link);
  386. })();
复制代码

TOP

返回列表