您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Infinite scroll for Interesting Engineering News
// ==UserScript== // @name IE News Infinite Scroll // @description Infinite scroll for Interesting Engineering News // @match https://interestingengineering.com/news* // @match https://www.interestingengineering.com/news* // @version 0.0.1.20250512180447 // @namespace https://greasyfork.org/users/1435046 // ==/UserScript== (() => { let currentPage = 1; let isLoading = false; // 1. select the real container of article cards const listContainer = document.querySelector('div.md\\:t-px-\\[102px\\] > div.t-flex-col'); if (!listContainer) return; // remove the existing pagination nav once and for all document.querySelector('nav[role="navigation"]')?.remove(); async function loadNextPage() { if (isLoading) return; isLoading = true; currentPage++; try { // 2. include trailing slash const url = `/news/page/${currentPage}/`; const res = await fetch(url); if (!res.ok) throw new Error(`Status ${res.status}`); const html = await res.text(); const doc = new DOMParser().parseFromString(html, 'text/html'); // 3. select only the article cards you want const cards = Array.from(doc.querySelectorAll( 'div.md\\:t-px-\\[102px\\] > div.t-flex-col > div' )); if (cards.length === 0) { // no more pages window.removeEventListener('scroll', onScroll); return; } // 4. append them in one pass cards.forEach(card => { listContainer.appendChild(document.importNode(card, true)); }); } catch (err) { console.error('Infinite Scroll error:', err); currentPage--; } finally { isLoading = false; } } function onScroll() { const threshold = document.documentElement.scrollHeight - window.innerHeight - 200; if (window.scrollY >= threshold) { loadNextPage(); } } window.addEventListener('scroll', onScroll, { passive: true }); })();