🏠 

Greasy Fork is available in English.

页面自动拼接

滚动页面接近底部时自动拼接下一页; 适用于 谷歌/百度, 其他各类需要手动点击"下一页/下一章/下一篇"按钮的网站


安装此脚本?
// ==UserScript==
// @name         页面自动拼接
// @namespace    http://tampermonkey.net/
// @version      0.1.4
// @description  滚动页面接近底部时自动拼接下一页; 适用于 谷歌/百度, 其他各类需要手动点击"下一页/下一章/下一篇"按钮的网站
// @author       You
// @include      *://*
// @grant        none
// ==/UserScript==
(function() {
'use strict';
if ( window !== window.top ) return;
// 加载设置
var __pageJoiningOption = {
loading:false,
text:/^\s*(next\s*page|下一[页章节篇])\s*(\>{0,2}|\→?|\》?)\s*$/i,
elem:'a',
// selector:'',
}
var wheel = {
timer:null,
delay:300,
thresold:500
}
var top = window.frames[0] || window;
var html = top.document.documentElement;
var lastFrameWrapper = top.document;
var loadingWrapper = (function(e) {
var div = document.createElement('div');
div.setAttribute('style', 'position:fixed; right:42px; bottom:11px; padding:5px 12px; font-size:10px; line-height:1; color:#fff; background:#4cade7; border-radius:4px; opacity:0; transition-duration:300ms;');
div.textContent = '加载中~';
return div;
})();
top.document.body.appendChild(loadingWrapper);
// 优先获取页面配置, 其次默认配置
setTimeout(()=>{
__pageJoiningOption = window.__pageJoiningOption || __pageJoiningOption;
top.addEventListener('scroll', windowScroll);
}, 200);
// 滚动事件
var scrollY = 0;
function windowScroll(e) {
clearTimeout(wheel.timer);
if ( e.delta < 0 ) return;
scrollY = html.scrollTop;
wheel.timer = setTimeout(()=>{
if ( html.clientHeight + scrollY + wheel.thresold>=html.scrollHeight ) joinPage();
}, wheel.delay)
};
function joinPage() {
if ( __pageJoiningOption.loading ) return;
__pageJoiningOption.loading = true;
loadingWrapper.style.opacity = 1;
var linkAddress = '';
if ( __pageJoiningOption.selector ) {
linkAddress = lastFrameWrapper.querySelector(__pageJoiningOption.selector).getAttribute('href')
}
else if ( __pageJoiningOption.text ) {
var links = lastFrameWrapper.querySelectorAll(`${__pageJoiningOption.elem||'a'}`), link;
for (var i=links.length-1; i!==0; i--) {
link = links[i];
if ( !link.getAttribute('href') ) continue;
if ( !__pageJoiningOption.text.test(link.textContent) ) continue;
linkAddress = link.getAttribute('href');
break;
};
}
if ( !linkAddress ) {
__pageJoiningOption.loading = false;
loadingWrapper.style.opacity = 0;
return;
}
var iframe = document.createElement('iframe');
iframe.setAttribute('style', `position:fixed; width:0; height:0; overflow:hidden; opacity:0;`);
iframe.src = linkAddress;
top.document.body.appendChild(iframe);
iframe.onload = function() {
var w = getLastWindow();
var wd = w.document;
var td = top.document;
var wrapper = td.createElement('div');
wrapper.id = top.document.body.id + ' iframe-wrapper'
wrapper.className = td.body.className;
wrapper.innerHTML = wd.body.innerHTML;
lastFrameWrapper = wrapper;
iframe.onload = null;
td.body.removeChild(iframe);
td.body.appendChild(wrapper);
html.scrollTo(html.scrollLeft, scrollY);
setTimeout(()=>{
loadingWrapper.style.opacity = 0;
__pageJoiningOption.loading = false;
},10);
}
}
function getLastWindow() {
var frames = top.frames;
return frames[frames.length-1] || top
}
window.getLastWindow = getLastWindow;
})();