Tieba Preload

贴吧预加载,自动加载下一页内容,同时附带消灭贴吧自带 Lazy Load 功能

当前为 2014-06-18 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Tieba Preload
  3. // @version 1.3.4
  4. // @description 贴吧预加载,自动加载下一页内容,同时附带消灭贴吧自带 Lazy Load 功能
  5. // @match http://tieba.baidu.com/*
  6. // @include http://tieba.baidu.com/*
  7. // @exclude http://tieba.baidu.com/*tp=1*
  8. // @exclude http://tieba.baidu.com/*tab=*
  9. // @author 864907600cc
  10. // @icon http://1.gravatar.com/avatar/147834caf9ccb0a66b2505c753747867
  11. // @run-at document-end
  12. // @grant GM_registerMenuCommand
  13. // @namespace http://ext.ccloli.com
  14. // ==/UserScript==
  15.  
  16. // 贴子判断方式由 kookxiang 提供
  17. // 本脚本基于 GPLv3 协议开源 http://www.gnu.org/licenses/gpl.html‎
  18. // (c) 86497600cc. Some Rights Reserved.
  19.  
  20. // 修复使用 GM 函数后脚本失效的问题,thanks to shyangs
  21. var window=unsafeWindow,
  22. _=unsafeWindow._,
  23. PageData=unsafeWindow.PageData,
  24. Page=unsafeWindow.Page,
  25. $=unsafeWindow.$,
  26. //forumlist=unsafeWindow.forumlist,
  27. no_refresh_url_prefix=(typeof unsafeWindow.no_refresh_url_prefix!='undefined')?unsafeWindow.no_refresh_url_prefix:null,
  28. is_firefox=navigator.userAgent.indexOf('Firefox')>=0?true:false;
  29.  
  30. var notification=document.createElement('div'),
  31. setting=(window.localStorage.getItem('tb_preload_setting')&&window.localStorage.getItem('tb_preload_setting').indexOf('{')>=0)?JSON.parse(window.localStorage.getItem('tb_preload_setting')):{},
  32. stylesheet='@keyframes setting_panel_show{0%{top:100px;opacity:0}80%{top:-20px;opacity:1}100%{top:0px;opacity:1}}@-webkit-keyframes setting_panel_show{0%{top:100px;opacity:0}80%{top:-20px;opacity:1}100%{top:0px;opacity:1}}@keyframes setting_panel_hide{0%{top:0px;opacity:1}20%{top:-20px;opacity:1}100%{top:100px;opacity:0}}@-webkit-keyframes setting_panel_hide{0%{top:0px;opacity:1}20%{top:-20px;opacity:1}100%{top:100px;opacity:0}}.tb_preload_notification{position:fixed;right:10px;padding:5px;bottom:-50px;box-shadow:0 0 1px 5px rgba(0,0,0,0.5);background:rgba(0,0,0,0.5);font-size:12px;color:#fff;opacity:0;-webkit-transition:0.25s all linear;-o-transition:0.25s all linear;transition:0.25s all linear;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:pointer;z-index:999999;pointer-events:none}.tb_preload_notification[show]{bottom:10px;opacity:1}.tb_preload_page{width:100%;font-size:14px;text-align:center}.tb_preload_page a{text-decoration:none;color:#333;margin:20px 0;display:block;font-size:14px}.tb_preload_setting{color:#2d64b3;cursor:pointer}.list_loading,.right_section [data-type="tb-datalazyload"]{display:none}.vpic_wrap img{max-height:90px}.tb_preload_setting_panel{width:600px;height:200px;margin:auto;position:fixed;top:0;bottom:0;left:0;right:0;z-index:999998;box-shadow:rgba(0,0,0,.5) 0 0 0 2500px,rgba(255,255,255,.75) 0 0 200px;background:rgba(255,255,255,.75);font-size:14px;-webkit-user-select:none;-moz-user-select:none;-webkit-animation:setting_panel_show 0.75s ease-in;animation:setting_panel_show 0.75s ease-in;font-family:"Hiragino Sans GB","Microsoft Yahei","WenQuanYi Micro Hei",Arial,Tahoma,sans-serif}.tb_preload_setting_panel[close]{-webkit-animation:setting_panel_hide 0.75s ease-out;animation:setting_panel_hide 0.75s ease-out}.tb_preload_setting_panel_bg{width:100%;height:100%;position:fixed;left:0;top:0;z-index:999997}.tb_preload_setting_panel span,.tb_preload_setting_panel a{display:block;cursor:pointer;height:20px;line-height:20px;margin:10px;-webkit-transition:all 0.25s linear;-moz-transition:all 0.25s linear;transition:all 0.25s linear}.tb_preload_setting_panel span{color:#F00;padding-left:50px}.tb_preload_setting_panel span:hover{text-shadow:#F00 0 0 1px}.tb_preload_setting_panel span[active]:hover,.tb_preload_setting_panel a:hover{text-shadow:#7fb900 0 0 1px}.tb_preload_setting_panel span::before{content:"×";display:inline-block;width:20px}.tb_preload_setting_panel span[active]{color:#7FB900}.tb_preload_setting_panel span[active]::before{content:"√"}.tb_preload_setting_panel p{margin:20px;font-size:20px;height:24px;line-height:24px;cursor:default;font-family:"Segoe Script"!important;text-shadow: #000 0 0 2px}.tb_preload_setting_panel a{color:#7FB900;font-family:"Segoe Script"!important;text-align:center}.tbui_follow_fixed{display:block!important}img[origin-src]{display:none!important}',
  33. setting_panel=false,
  34. ss=document.createElement('style'),
  35. notification_timer=null;
  36. ss.textContent=stylesheet;
  37. document.head.appendChild(ss);
  38. notification.className='tb_preload_notification';
  39. document.body.appendChild(notification);
  40. if(setting.thread_preload==null)setting.thread_preload=1;
  41. if(setting.thread_list_lazyload==null)setting.thread_list_lazyload=1;
  42. if(setting.notification_1_3_4=null){
  43. setting.notification_1_3_4=1;
  44. alert('Tieba Preload Notification\n\n1. 自该版本起添加 @namespace,若出现重复安装的情况请删除旧脚本;\n2. Firefox 下不翻页 bug 已临时使用定时器解决,为保证楼中楼完全加载,请注意在载入页面完成后不要在 1s 内滚动到页面底部 = = 关于该 bug 引起的具体原因仍旧不明,不知道是不是 Firefox 特有的 bug……\n3. 现可以通过在贴子页的“开启/关闭自动加载”处单击鼠标右键打开设置界面,原开启设置界面的方式保留。');
  45. window.localStorage.setItem('tb_preload_setting',JSON.stringify(setting));
  46. }
  47.  
  48. function set_function(v){
  49. switch(v){
  50. case 1:
  51. if(setting.thread_preload==1){
  52. setting.thread_preload=0;
  53. if(setting_node){
  54. setting_node.textContent='开启自动加载';
  55. setting_node_2.textContent='开启自动加载';
  56. }
  57. if(PageData.product=='pb'&&typeof loader!='undefined'&&loader!=null){
  58. clearInterval(loader);
  59. loader=null;
  60. }
  61. show_notification(1,'已关闭自动加载......');
  62. notification.setAttribute('show','true');
  63. notification_timer=setTimeout(function(){notification.removeAttribute('show')},5000);
  64. }
  65. else{
  66. setting.thread_preload=1;
  67. if(setting_node){
  68. setting_node.textContent='关闭自动加载';
  69. setting_node_2.textContent='关闭自动加载';
  70. }
  71. if(PageData.product=='pb'&&typeof loader!='undefined'&&loader==null)preload_listener();
  72. show_notification(1,'已开启自动加载......');
  73. }
  74. break;
  75. case 2:
  76. if(setting.thread_list_preload==1){
  77. alert('当开启首页贴子列表预加载时,该项不能关闭。');
  78. }
  79. else if(setting.thread_list_lazyload==1){
  80. setting.thread_list_lazyload=0;
  81. if(PageData.product=='frs'&&typeof loader!='undefined'&&loader!=null){
  82. clearInterval(loader);
  83. loader=null;
  84. if(document.getElementById('frs_list_pager'))document.getElementById('frs_list_pager').onclick=null;
  85. }
  86. show_notification(1,'已禁用自动去除首页 lazyload......');
  87. }
  88. else{
  89. setting.thread_list_lazyload=1;
  90. //setting_node.textContent='禁用自动去除首页 lazyload';
  91. if(PageData.product=='frs'&&typeof loader!='undefined'&&loader==null){
  92. kill_tieba_lazyload_listener();
  93. }
  94. show_notification(1,'已开启自动去除首页 lazyload......');
  95. }
  96. break;
  97. case 3:
  98. if(setting.thread_list_preload==1){
  99. setting.thread_list_preload=0;
  100. if(PageData.product=='frs'&&typeof loader!='undefined'&&loader!=null){
  101. clearInterval(loader);
  102. loader=null;
  103. if(document.getElementById('frs_list_pager'))document.getElementById('frs_list_pager').onclick=null;
  104. }
  105. show_notification(1,'已关闭自动加载......');
  106. }
  107. else{
  108. setting.thread_list_preload=1;
  109. setting.thread_list_lazyload=1;
  110. if(PageData.product=='frs'&&typeof loader!='undefined'&&loader==null){
  111. preload_listener();
  112. }
  113. show_notification(1,'已开启自动加载......');
  114. }
  115. break;
  116. }
  117. window.localStorage.setItem('tb_preload_setting',JSON.stringify(setting));
  118. update_setting_panel();
  119. }
  120.  
  121. function call_setting(){
  122. if(setting_panel==false){
  123. setting_panel=true;
  124. var panel=document.createElement('div'),
  125. panel_bg=document.createElement('div');
  126. panel_bg.className='tb_preload_setting_panel_bg';
  127. panel.className='tb_preload_setting_panel';
  128. panel_bg.onclick=function(){
  129. panel.setAttribute('close',true);
  130. setTimeout(function(){panel.parentElement.removeChild(panel);},700);
  131. panel_bg.parentElement.removeChild(panel_bg);
  132. setting_panel=false;
  133. }
  134. panel_bg.setAttribute('title','点击以关闭设置界面');
  135. panel.innerHTML='<p align="center">Tieba Preload Setting</p><span class="tbpreload_setting_panel_thread_preload">自动加载贴子下一页</span><span class="tbpreload_setting_panel_thread_list_lazyload">去除贴吧首页 lazyload</span><span class="tbpreload_setting_panel_thread_list_preload">自动加载贴子列表下一页</span><a href="http://tieba.baidu.com/p/2939166340">Feedback</a>';
  136. document.body.appendChild(panel);
  137. document.body.appendChild(panel_bg);
  138. var panel_thread_preload=document.getElementsByClassName('tbpreload_setting_panel_thread_preload')[0],
  139. panel_thread_list_lazyload=document.getElementsByClassName('tbpreload_setting_panel_thread_list_lazyload')[0],
  140. panel_thread_list_preload=document.getElementsByClassName('tbpreload_setting_panel_thread_list_preload')[0];
  141. panel_thread_preload.onclick=function(){
  142. set_function(1);
  143. }
  144. panel_thread_list_lazyload.onclick=function(){
  145. set_function(2);
  146. }
  147. panel_thread_list_preload.onclick=function(){
  148. set_function(3);
  149. }
  150. update_setting_panel();
  151. }
  152. }
  153.  
  154. function update_setting_panel(){
  155. var panel_thread_preload=document.getElementsByClassName('tbpreload_setting_panel_thread_preload')[0],
  156. panel_thread_list_lazyload=document.getElementsByClassName('tbpreload_setting_panel_thread_list_lazyload')[0],
  157. panel_thread_list_preload=document.getElementsByClassName('tbpreload_setting_panel_thread_list_preload')[0];
  158. if(setting.thread_preload==1)panel_thread_preload.setAttribute('active','true');
  159. else if(panel_thread_preload.hasAttribute('active'))panel_thread_preload.removeAttribute('active');
  160. if(setting.thread_list_lazyload==1)panel_thread_list_lazyload.setAttribute('active','true');
  161. else if(panel_thread_list_lazyload.hasAttribute('active'))panel_thread_list_lazyload.removeAttribute('active');
  162. if(setting.thread_list_preload==1)panel_thread_list_preload.setAttribute('active','true');
  163. else if(panel_thread_list_preload.hasAttribute('active'))panel_thread_list_preload.removeAttribute('active');
  164. }
  165.  
  166. function show_notification(n,c){
  167. notification.textContent=c;
  168. notification.setAttribute('show','true');
  169. if(notification_timer!=null){
  170. clearTimeout(notification_timer);
  171. notification_timer=null;
  172. }
  173. if(n==1){
  174. notification_timer=setTimeout(function(){
  175. notification.removeAttribute('show');
  176. notification_timer=null;
  177. },5000);
  178. }
  179. }
  180.  
  181. GM_registerMenuCommand('Tieba Preload Setting',call_setting);
  182.  
  183. if(typeof PageData!='undefined'&&PageData&&(PageData.product=='pb'||PageData.product=='frs')){ // 判断是否载入
  184. var loading=false,
  185. loader=null,
  186. pager_timer=null;
  187.  
  188. // 以下语句中代码来自 Kill Tieba Lazy Load (by 864907600cc, Licence: WTFPL)
  189.  
  190. function kill_tieba_lazyload(){
  191. var codearea=document.getElementById('pblistCodeArea')||document.getElementById('frslistCodeArea')||null;
  192. if(codearea!=null){
  193. //document.getElementById('list_loading').outerHTML=document.getElementById('pblistCodeArea').value;
  194. //document.getElementById('pblistCodeArea').parentElement.removeChild(document.getElementById('pblistCodeArea'));
  195. var lazyload_t_nodes=codearea.childNodes;
  196. for(var i=0;i<lazyload_t_nodes.length;i++){
  197. if(lazyload_t_nodes[i].nodeType==8){
  198. codearea.outerHTML=lazyload_t_nodes[i].data;
  199. //lazyload_nodes[i].parentElement.removeChild(lazyload_nodes[i])
  200. break;
  201. }
  202. }
  203. }
  204. if(document.querySelectorAll('img[data-tb-lazyload]')){
  205. var lazyload_i_nodes=document.querySelectorAll('img[data-tb-lazyload]');
  206. for(var i=0;i<lazyload_i_nodes.length;i++){
  207. lazyload_i_nodes[i].setAttribute('src',lazyload_i_nodes[i].getAttribute('data-tb-lazyload'));
  208. lazyload_i_nodes[i].removeAttribute('data-tb-lazyload');
  209. }
  210. }
  211. if(document.querySelectorAll('img[onloadfun="listimg"][original]')){
  212. var lazyload_i_nodes=document.querySelectorAll('img[onloadfun="listimg"][original]');
  213. for(var i=0;i<lazyload_i_nodes.length;i++){
  214. lazyload_i_nodes[i].setAttribute('src',lazyload_i_nodes[i].getAttribute('original'));
  215. }
  216. }
  217. if(PageData.product=='pb'){
  218. //_.Module.use("pb/widget/ForumListV3", {});
  219. _.Module.use('pb/component/NoAutoVideo',[{text_videofrom:'视频来自: '}]);
  220. //rebind_image();
  221. //Page.bindOpenImg();
  222. //console.log('触发强制显示楼中楼');
  223. if(typeof window.forumlist=='object'&&typeof window.forumlist._loadSubList=='object'){
  224. if(is_firefox)setTimeout(function(){kill_lzl();},500);
  225. else kill_lzl();
  226. }
  227. else var k=setInterval(function(){if(typeof window.forumlist=='object'&&typeof window.forumlist._loadSubList=='object')clearInterval(k);kill_lzl();},1000)
  228. //console.log('触发强制显示楼中楼完成');
  229. }
  230. if(PageData.product=='frs'&&document.cookie.match(/batch_delete_mode=(\w{4,5})/)&&document.cookie.match(/batch_delete_mode=(\w{4,5})/)[1]=='true'){
  231. var tls=document.getElementsByClassName('j_thread_list');
  232. for(var i=0;i<tls.length;i++){
  233. if(!tls[i].getElementsByClassName('batch_delete')[0]){
  234. var s='<div class="batch_delete j_batch_delete"><div class="batch_delete_text">勾选</div><input type="checkbox" class="batch_delete_select j_batch_delete_select"></div>';
  235. var t=document.createElement('div');
  236. tls[i].appendChild(t);
  237. t.outerHTML=s;
  238. }
  239. }
  240. }
  241. }
  242.  
  243. function show_lzl(c){
  244. var t=document.createElement('iframe');
  245. t.style.cssText='width:0;height:0;position:absolute'
  246. t.setAttribute('onload',c);
  247. document.body.appendChild(t);
  248. // kill_lzl();
  249. //document.body.removeChild(t); // 取消自动移除 iframe,因为该操作可能导致在 Firefox 下无法运行
  250. }
  251.  
  252. function kill_lzl(){
  253. // Fuck LZL Thanks To 8qwe24657913
  254. //console.log('执行强制显示楼中楼');
  255. var a = document.getElementsByClassName('hideLzl'),
  256. b = window.forumlist._loadSubList,
  257. c = a.length;
  258. /*while (--c > -1) {
  259. console.log(a)
  260. console.log('开始处理 - '+(c+1));
  261. b.showLzlPost(a[c]);
  262. console.log('showLzlPost - '+(c+1));
  263. a[c].setAttribute('class',a[c].getAttribute('class').replace(/ ?hideLzl/,''));
  264. console.log('处理完成 - '+(c+1));
  265. }*/
  266. //for(var i=0;i<c;i++){
  267. while(a[0]){
  268. console.log(a)
  269. //console.log('开始处理 - ');
  270. console.log(a[0])
  271. b.showLzlPost(a[0]);
  272. //console.log('showLzlPost - ');
  273. a[0].setAttribute('class',a[0].getAttribute('class').replace(/ ?hideLzl/,''));
  274. //console.log('处理完成 - ');
  275. }
  276. //console.log('楼中楼处理完成!');
  277. /*for(var i=0;i<c.length;i++){
  278. b.showLzlPost(a[i]);
  279. a[i].className=a[i].className.replace(/ ?hideLzl/,'');
  280. }*/
  281. }
  282.  
  283. // 以下语句中代码基于 Tieba Preload 修改 (by 864907600cc, Licence: GPLv3 | http://ccloli.com/201212/tieba-preload-source/)
  284.  
  285. function whether_fetching(){
  286. //console.log('whether_fetching');
  287. var getscroll=document.documentElement.scrollTop||document.body.scrollTop,
  288. scroll_psi=document.body.scrollHeight-getscroll,
  289. psi=PageData.product=='pb'?5000:PageData.forum.version==2?2500:1500;
  290. if(scroll_psi<=psi&&loading==false){
  291. if(cur_page<total_page){
  292. loading=true;
  293. fetch_next_page();
  294. }
  295. //else window.onscroll=null;
  296. else{
  297. clearInterval(loader);
  298. loader=null
  299. }
  300. }
  301. }
  302.  
  303. function fetch_next_page(){
  304. //console.log('fetch_next_page');
  305. switch(PageData.product){
  306. case 'pb':
  307. var url=page_url+'?see_lz='+see_lz+'&pn='+next_page;
  308. xhr.onreadystatechange=function(){
  309. if(xhr.readyState==4&&xhr.status==200){
  310. var str=xhr.responseText;
  311. if(PageData.page=='v1')var data=str.split('"p_postlist"')[1].split('<div class="p_thread')[0].match(/>([\s\S]+)/)[1]; // 旧版贴吧
  312. else var data=str.split('"p_postlist"')[1].split('"right_section')[0].match(/>([\s\S]+)<\/div>[\s\S]*<\/div>[\s\S]*<div/)[1]; // 先 split 再 match 减少资源消耗(>20s → <1s)
  313. var node=document.getElementsByClassName('p_postlist')[0],
  314. t_node=document.createElement('div'),
  315. p_node=document.createElement('div');
  316. p_node.className='tb_preload_page';
  317. p_node.innerHTML='<a href="'+url+'">第 '+next_page+' 页,共 '+total_page+' 页</a>';
  318. node.appendChild(p_node);
  319. node.appendChild(t_node);
  320. t_node.outerHTML=data;
  321. if(str.match(/<script>.*(_\.Module\.use\("pb\/widget\/ForumListV3"[\s\S]+?)<\/script>/)){
  322. var lzl=str.match(/<script>.*(_\.Module\.use\("pb\/widget\/ForumListV3"[\s\S]+?)<\/script>/)[1];
  323. show_lzl(lzl);
  324. }
  325. kill_tieba_lazyload();
  326. ++cur_page;
  327. ++next_page;
  328. PageData.pager.cur_page=cur_page;
  329. see_lz=window.location.href.match(/see_lz/)?window.location.href.match(/see_lz=(\d)/)[1]:PageData.special.lz_only;
  330. loading=false;
  331. if(cur_page==total_page){
  332. clearInterval(loader);
  333. loader=null;
  334. }
  335. notification.removeAttribute('show');
  336. }
  337. }
  338. xhr.open('GET',url);
  339. xhr.send();
  340. notification.setAttribute('show','true');
  341. show_notification(0,'正在加载第 '+next_page+' 页......');
  342. break;
  343. case 'frs':
  344. var url=page_url+'&pn='+next_page;
  345. if(PageData.forum.version==2){
  346. var xurl=page_url+'&apage=1&pn='+next_page;
  347. }
  348. else{
  349. if(location.hash.indexOf('#!')>=0){
  350. var hash_data=location.hash.match(/#\!\/(.)/)[1];
  351. if(hash_data!=last_hash_data){
  352. switch(hash_data){
  353. case 'm':
  354. page_url=page_url.replace(/f.+kw=/,'f?kw=');
  355. last_hash_data='m';
  356. cur_page=0;
  357. next_page=cur_page+50;
  358. total_page=document.querySelector('a.last').href.match(/pn=(\d+)/)[1];
  359. break;
  360. case 'n':
  361. page_url=page_url.replace(/f.+kw=/,'f/good?kw=');
  362. last_hash_data='n';
  363. cur_page=0;
  364. next_page=cur_page+50;
  365. total_page=document.querySelector('a.last').href.match(/pn=(\d+)/)[1];
  366. break;
  367. case 'v':
  368. page_url=page_url.replace(/f.+kw=/,'f/vote?kw=');
  369. last_hash_data='v';
  370. cur_page=0;
  371. next_page=cur_page+50;
  372. total_page=document.querySelector('a.last').href.match(/pn=(\d+)/)[1];
  373. break;
  374. }
  375. }
  376. }
  377. var xurl=page_url+'&ajax=1&pn='+next_page
  378. }
  379. xhr.onreadystatechange=function(){
  380. if(xhr.readyState==4&&xhr.status==200){
  381. var str=xhr.responseText;
  382. if(PageData.forum.version==2){
  383. var data=str.match(/<ul id="thread_list"[\s\S]*?>([\s\S]+)<\/ul>/)[1],
  384. node=document.getElementById('thread_list');
  385. p_node=document.createElement('div'),
  386. context='<a href="'+url+'">第 '+(parseInt(next_page/50)+1)+' 页,共 '+(parseInt(total_page/50)+1)+' 页</a>';
  387. }
  388. else{
  389. var data=JSON.parse(str).data.content.split('<tbody>')[1].split('</tbody>')[0],//str.split('<tbody>')[1].split('</tbody>')[0],
  390. node=document.querySelector('#thread_list tbody'),
  391. p_node=document.createElement('tr'),
  392. context='<td colspan="5"><a href="'+url+'">第 '+(parseInt(next_page/50)+1)+' 页,共 '+(parseInt(total_page/50)+1)+' 页</a></td>';
  393. }
  394. var //node=document.getElementById('thread_list'),
  395. t_node=document.createElement('div')/*,
  396. p_node=document.createElement('div')*/;
  397. p_node.className='tb_preload_page';
  398. p_node.innerHTML=context;
  399. node.appendChild(p_node);
  400. node.appendChild(t_node);
  401. t_node.outerHTML=data;
  402. kill_tieba_lazyload();
  403. cur_page+=50;
  404. next_page+=50;
  405. loading=false;
  406. if(cur_page==total_page){
  407. clearInterval(loader);
  408. loader=null;
  409. }
  410. notification.removeAttribute('show');
  411. }
  412. }
  413. xhr.open('GET',xurl);
  414. xhr.send();
  415. notification.setAttribute('show','true');
  416. show_notification(0,'正在加载第 '+(parseInt(next_page/50)+1)+' 页......');
  417. break;
  418. }
  419. }
  420.  
  421. function preload_listener(){
  422. if(cur_page!=total_page){
  423. //console.log('aaa');
  424. //window.onscroll=function(){ // 改用定时器以节省资源
  425. loader=setInterval(function(){whether_fetching()},1000);
  426. //}
  427. }
  428. }
  429.  
  430. function kill_tieba_lazyload_listener(){
  431. kill_tieba_lazyload();
  432. if(document.getElementById('frs_list_pager'))document.getElementById('frs_list_pager').onclick=function(){
  433. if(loader==null)loader=setInterval(function(){
  434. if(document.getElementById('frslistCodeArea')){
  435. //kill_tieba_lazyload();
  436. clearInterval(loader);
  437. loader=null;
  438. kill_tieba_lazyload_listener();
  439. }
  440. },1000);
  441. }
  442. }
  443.  
  444. function rebind_image(){
  445. var imglist=document.querySelectorAll('.d_post_content img[pic_type="0"]');//.BDE_Image
  446. $(imglist).unbind();
  447. Page._bindOpenImg();
  448.  
  449. }
  450.  
  451. function bind_pager(){
  452. var pager1=document.querySelectorAll('.pb_list_pager,.jump_btn_bright');
  453. var pager2=document.querySelectorAll('.jump_input_bright');
  454. for(var i=0;i<pager1.length;i++){
  455. pager1[i].addEventListener('click',rebind_pager);
  456. }
  457. for(var i=0;i<pager2.length;i++){
  458. pager2[i].addEventListener('keypress',function(e){
  459. if(e.keyCode==13)rebind_pager();
  460. });
  461. }
  462. }
  463.  
  464. function rebind_pager(){
  465. if(pager_timer==null){
  466. pager_timer=setInterval(function(){
  467. if(PageData.pager.cur_page!=cur_page){
  468. clearInterval(pager_timer);
  469. pager_timer=null;
  470. kill_tieba_lazyload();
  471. bind_pager();
  472. cur_page=PageData.pager.cur_page;
  473. next_page=cur_page+1;
  474. total_page=PageData.pager.total_page;
  475. if(loader==null)preload_listener();
  476. inner_setting();
  477. }
  478. },1000)
  479. }
  480. }
  481.  
  482. function inner_setting(){
  483. var setting_node=document.createElement('li'),
  484. page_node=document.getElementsByClassName('l_posts_num');
  485. setting_node.textContent=setting.thread_preload==1?'关闭自动加载':'开启自动加载';
  486. setting_node.className='tb_preload_setting';
  487. var setting_node_2=setting_node.cloneNode(true);
  488. setting_node.onclick=function(){set_function(1)};
  489. setting_node_2.onclick=function(){set_function(1)};
  490. setting_node.oncontextmenu=function(){call_setting();return false};
  491. setting_node_2.oncontextmenu=function(){call_setting();return false;};
  492. if(page_node[0])page_node[0].insertBefore(setting_node,page_node[0].getElementsByClassName('l_pager')[0].nextSibling);
  493. if(page_node[1])page_node[1].insertBefore(setting_node_2,page_node[1].getElementsByClassName('l_pager')[0].nextSibling);
  494. }
  495.  
  496. //notification.onclick=function(){set_function(1)};
  497.  
  498. if(PageData.product=='frs'){
  499. /*if(document.getElementsByClassName('th_footer_l')[0]){
  500. var setting_node=document.createElement('a'),
  501. page_node=document.getElementsByClassName('th_footer_l')[0];
  502. setting_node.textContent=setting.thread_list_lazyload==1?'禁用自动去除首页 lazyload':'开启自动去除首页 lazyload'; // 好长 _(:з」∠)_
  503. setting_node.className='tb_preload_setting';
  504. setting_node.onclick=function(){set_function(2)};
  505. page_node.appendChild(setting_node);
  506. }*/
  507. notification.style.pointerEvents='none';
  508. var xhr=new XMLHttpRequest(),
  509. page_url=no_refresh_url_prefix?('//tieba.baidu.com'+no_refresh_url_prefix):location.href.replace(/&?pn=\d+/,''),
  510. cur_page=location.href.match(/pn=(\d+)/)?parseInt(location.href.match(/pn=(\d+)/)[1]):0,
  511. next_page=cur_page+50,
  512. total_page=PageData.forum.thread_num-PageData.forum.thread_num%50||document.querySelector('a.last').href.match(/pn=(\d+)/)[1],
  513. last_hash_data='';
  514. if(setting.thread_list_preload==1){
  515. kill_tieba_lazyload();
  516. preload_listener();
  517. }
  518. else if(setting.thread_list_lazyload==1)kill_tieba_lazyload_listener();
  519. }
  520. else if(PageData.product=='pb'&&PageData.pager){
  521. //Page._bindOpenImg=Page.bindOpenImg;
  522. //Page.bindOpenImg=rebind_image;
  523. kill_tieba_lazyload();
  524. // 以下语句中部分判断代码来自 Chrome 扩展程序 KK 贴吧工具箱 (by kookxiang | https://chrome.google.com/webstore/detail/bcmemjlkdbeephmnklgimfnjlmfhfdgi)
  525. /*cur_page=0,
  526. total_page=0,
  527. page_url='',
  528. see_lz=0,*/
  529. var xhr=new XMLHttpRequest(),
  530. page_url=PageData.thread_url?'//tieba.baidu.com'+PageData.thread_url:location.href.match(/\/\/tieba\.baidu\.com\/p\/\d+/)[0],
  531. see_lz=window.location.href.match(/see_lz/)?window.location.href.match(/see_lz=(\d)/)[1]:PageData.special.lz_only,
  532. cur_page=PageData.pager.cur_page,
  533. total_page=PageData.pager.total_page,
  534. next_page=cur_page+1;
  535. if(setting.thread_preload==1)preload_listener();
  536. bind_pager();
  537. inner_setting();
  538. /*for(var i in document.scripts){
  539. if(document.scripts[i].textContent.indexOf('ForumListV3')>=0){
  540. var lzl=document.scripts[i].textContent;
  541. show_lzl(lzl);
  542. break;
  543. }
  544. }*/
  545. }
  546. }