您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds infinite scroll to HackerNews
// ==UserScript== // @description Adds infinite scroll to HackerNews // @name Hacker News Infinite Scroll // @namespace Violentmonkey Scripts // @match https://news.ycombinator.com/ // @version 1.1.0 // @grant none // ==/UserScript== const regex = new RegExp(/<center>.*(<table id="hnmain".*)<\/center>/gms); let moreLinkAnchor = document.querySelector('td.title > a.morelink'); let count = 2; function getHTML(url) { return new Promise(function (resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open('get', url, true); xhr.responseType = 'document'; xhr.onload = function () { var status = xhr.status; if (status == 200) { resolve(xhr.response.documentElement.innerHTML); } else { reject(status); } }; xhr.send(); }); } let tableName = (document.querySelector('table.itemlist') === null) ? "comment-tree" : "itemlist" const insertAfter = (el, referenceNode) => { referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling); } const isMoreLink = elm => { return [...elm.getElementsByTagName("*")].map(e => e.className).includes('morelink'); } const parseNextPage = (nextPage, tableType, moreTr) => { const page = new DOMParser().parseFromString(nextPage, 'text/html'); let queryStr = (tableType === 'comment-tree') ? `table.${tableType} tr.athing` : `table.${table.class} tr` let newTrs = [...page.querySelectorAll(queryStr)]; if (tableType === 'comment-tree' && newTrs.length < 259) { noMoreLeft = true; moreTr.nextElementSibling.style.display = "none"; } let filteredTrs = (tableType === 'itemlist') ? newTrs.filter(e => !isMoreLink(e)) : newTrs filteredTrs.forEach(tr => { if (tr.className !== "morespace") { moreTr.parentNode.insertBefore(tr, moreTr) } }); } let noMoreLeft = false; window.onscroll = async function() { if (((window.innerHeight + Math.ceil(window.pageYOffset)) >= document.body.offsetHeight) && (noMoreLeft !== true)) { console.log('bottom of page reached'); let testResponse; let parsed; if (moreLinkAnchor !== null) { //let table; let moreLink = /^(.*?p=)/.exec(moreLinkAnchor['href'])[0]; let nextPage = `${moreLink}${count}`; table = document.querySelector('table.itemlist') === null ? { class: "comment-tree", element: document.querySelector('table.comment-tree') } : { class: "itemlist", element: document.querySelector('table.itemlist') }; let tableRowMore = table.element.querySelector('.morespace'); let pageRes = await getHTML(nextPage); parseNextPage(pageRes, table.class, tableRowMore) count++; } } };