您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
MeiziTuAutoLoad!
- // ==UserScript==
- // @name MeiziTuAutoLoad
- // @namespace //tampermonkey.net/
- // @version 0.2.0
- // @description MeiziTuAutoLoad!
- // @author cuzfinal
- // @match http*://www.mzitu.com/*
- // @grant none
- // ==/UserScript==
- let loadInterval
- const config = {
- hostName: location.hostname,
- interval: 200, // 发起一次请求后200ms内不再发起
- isInterval: 0,
- overSet: document.documentElement.clientHeight * 0.2 // 分页导航距离屏幕底部大于屏幕高度20%时触发加载
- }
- const defaultParams = {
- method: 'GET',
- }
- const hostRegular = {
- 'www.mzitu.com': {
- container: '.main-image',
- pageUrl() { return `/${this.articleId}/${++this.page}` },
- page: location.href.match(/\/\d(\d)?$/) && location.href.match(/\/(\d(\d)?)$/)[1] || 1,
- articleId: location.href.match(/com\/(\d+)/)[1],
- hideNodes: null,
- nav: '.pagenavi',
- isOver(next) {
- return next.nav.lastElementChild.textContent === "下一组»"
- },
- extra: () => { }
- }
- }
- const current = hostRegular[config.hostName]
- const box = document.querySelector(current.container)
- let pageNav = getNav()
- const io = new IntersectionObserver(loadNext)
- function getNav() {
- return document.querySelector(current.nav)
- }
- function getTitle(node) {
- if (node.tagName === 'TITLE') {
- return node.outerText
- }
- }
- function parseNextPage(dom) {
- let content, nav, title
- content = current.next ? dom.querySelectorAll(current.next) : [...dom.querySelector(current.container).children]
- nav = dom.querySelector(current.nav)
- const result = { content, nav, title }
- current.isOver && current.isOver(result, dom)
- return result
- }
- async function loadNext(entries) {
- if(!entries[0].isIntersecting) return
- io.unobserve(pageNav)
- const nextUrl = current.pageUrl()
- try {
- const resp = await fetch(nextUrl, current.params || defaultParams)
- const parser = new DOMParser()
- const dom = parser.parseFromString(await resp.text(), 'text/html')
- const next = parseNextPage(dom)
- if (resp.status === 404) {
- loadOver()
- } else {
- next.content.forEach(el => box.appendChild(el))
- if (next.nav) {
- pageNav.parentNode.replaceChild(next.nav, pageNav)
- pageNav = getNav()
- io.observe(pageNav)
- }
- if (next.title) {
- document.title = next.title
- }
- }
- current.isOver(next, dom) && (loadOver())
- } catch (e) {
- loadOver()
- console.log(e)
- }
- }
- function hideURL() {
- [...document.querySelectorAll(current.hideNodes)].forEach(el => el.style.display = "none")
- }
- function loadOver() {
- io.disconnect()
- hideURL()
- current.extra && current.extra()
- console.log('Preload loaded!')
- }
- (function () {
- // Your code here...
- current.beforeLoad && current.beforeLoad()
- window.addEventListener("load", () => io.observe(pageNav))
- console.log('Preload loading...')
- })();