🏠 返回首頁 

Greasy Fork is available in English.

Brave Infinite Scroll

Enables infinite scroll on Brave Search

// ==UserScript==
// @name         Brave Infinite Scroll
// @description  Enables infinite scroll on Brave Search
// @match        *://search.brave.com/search*
// @run-at       document-end
// @version 0.0.1.20250309090434
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==
let pageNumber = 1;
let isLoading = false;
let hasMore = true;
const fetchNextPage = async () => {
const baseUrl = new URL(window.location.href);
baseUrl.searchParams.set('offset', pageNumber);
try {
const response = await fetch(baseUrl.toString());
const text = await response.text();
const newDoc = new DOMParser().parseFromString(text, 'text/html');
// Create container for new r###lts
const container = document.createElement('div');
container.id = `page-${pageNumber}`;
container.style.marginTop = '20px';
// Add new r###lts (adjust selector based on Brave's structure)
newDoc.querySelectorAll('#r###lts > .snippet').forEach(r###lt => {
container.appendChild(r###lt.cloneNode(true));
});
// Find insertion point (before pagination element)
const insertionPoint = document.querySelector('#pagination-snippet') ||
document.querySelector('#r###lts').lastElementChild;
if (insertionPoint) {
insertionPoint.before(container);
}
// Check for more pages (look for Next button)
hasMore = !!newDoc.querySelector('a[href*="offset="]:not([disabled])');
if (hasMore) pageNumber++;
} catch (error) {
console.error('Error fetching next page:', error);
hasMore = false;
}
};
window.addEventListener('scroll', async () => {
const scrollThreshold = 1000;
const scrollPosition = window.innerHeight + window.scrollY;
const scrollMax = document.documentElement.scrollHeight - scrollThreshold;
if (!isLoading && hasMore && scrollPosition >= scrollMax) {
isLoading = true;
await fetchNextPage();
isLoading = false;
}
});