您需要先安装一个扩展,例如 篡改猴、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++;
- }
- }
- };
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址