您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
GUI for spamming history with current URL on any site (shows current URL, prompts only for count)
// ==UserScript== // @name History Spammer GUI (Universal) // @namespace http://tampermonkey.net/ // @version 1.300000001 // @description GUI for spamming history with current URL on any site (shows current URL, prompts only for count) // @author Iron web10 // @license MIT // @match *://*/* // @grant none // @run-at document-end // ==/UserScript== (function() { 'use strict'; // Prevent duplicate UI if script is injected multiple times if (window.__iw10_history_spammer_installed) return; window.__iw10_history_spammer_installed = true; // Create the menu container const menuContainer = document.createElement('div'); Object.assign(menuContainer.style, { position: 'fixed', top: '10px', right: '10px', width: '300px', backgroundColor: 'rgba(0, 0, 0, 0.85)', color: 'white', padding: '10px', borderRadius: '6px', zIndex: '2147483647', // very high z-index to avoid being hidden fontFamily: 'Arial, sans-serif', boxSizing: 'border-box' }); const title = document.createElement('div'); title.innerText = 'History Spammer | Iron web10'; Object.assign(title.style, { fontSize: '14px', margin: '0 0 8px 0', fontWeight: '600' }); menuContainer.appendChild(title); // Show current URL (updates live) const urlDisplay = document.createElement('div'); urlDisplay.innerText = 'URL: ' + window.location.href; Object.assign(urlDisplay.style, { fontSize: '12px', wordBreak: 'break-all', margin: '0 0 8px 0' }); menuContainer.appendChild(urlDisplay); // small helper line const hint = document.createElement('div'); hint.innerText = 'Click "Spam History" → enter count'; hint.style.fontSize = '11px'; hint.style.opacity = '0.85'; menuContainer.appendChild(hint); // Spam history function — prompts only for count function spamHistory() { // ensure using the current URL (in case page changed) const currentUrl = window.location.href; urlDisplay.innerText = 'URL: ' + currentUrl; const raw = prompt("How many times do you want this page to show up in your history?"); if (raw === null) return; // user cancelled const num = parseInt(raw, 10); if (isNaN(num) || num <= 0) { return alert("Invalid number!"); } // Safety: warn for huge numbers to avoid freezing the tab const SOFT_LIMIT = 500; if (num > SOFT_LIMIT) { const ok = confirm(`You asked to push ${num} entries. This may cause the tab to become unresponsive. Continue?`); if (!ok) return; } // push entries into history; keep behavior minimal to avoid breaking anything else try { for (let i = 1; i <= num; i++) { // pushState with a short string for intermediate entries, final entry uses the actual URL history.pushState(null, '', i === num ? currentUrl : i.toString()); } alert(`Flooding successful! ${currentUrl} is now in your history ${num} times.`); } catch (e) { console.error('History push failed:', e); alert('Failed to push to history. See console for details.'); } } // Create button const spamButton = document.createElement('button'); spamButton.textContent = 'Spam History'; Object.assign(spamButton.style, { width: '100%', padding: '8px', marginTop: '8px', cursor: 'pointer', backgroundColor: '#666', color: '#fff', border: 'none', borderRadius: '4px' }); spamButton.onclick = spamHistory; menuContainer.appendChild(spamButton); // Add a hide/show toggle const toggle = document.createElement('button'); toggle.textContent = 'Hide'; Object.assign(toggle.style, { float: 'right', marginTop: '-34px', marginRight: '-6px', background: 'transparent', color: '#fff', border: 'none', cursor: 'pointer', fontSize: '12px' }); let hidden = false; toggle.onclick = () => { hidden = !hidden; if (hidden) { // collapse to a small bar menuContainer.style.width = '110px'; urlDisplay.style.display = 'none'; spamButton.style.display = 'none'; hint.style.display = 'none'; toggle.textContent = 'Show'; title.innerText = 'History Spammer'; } else { menuContainer.style.width = '300px'; urlDisplay.style.display = ''; spamButton.style.display = ''; hint.style.display = ''; toggle.textContent = 'Hide'; title.innerText = 'History Spammer | Iron web10'; } }; menuContainer.appendChild(toggle); // Append menu to the page document.body.appendChild(menuContainer); // Keep the displayed URL updated when SPA frameworks change location (common on many sites) const updateUrlDisplay = () => urlDisplay.innerText = 'URL: ' + window.location.href; // intercept pushState/replaceState to update the display (function() { const _push = history.pushState; history.pushState = function() { const ret = _push.apply(this, arguments); updateUrlDisplay(); return ret; }; const _replace = history.replaceState; history.replaceState = function() { const ret = _replace.apply(this, arguments); updateUrlDisplay(); return ret; }; window.addEventListener('popstate', updateUrlDisplay); })(); // As a fallback, observe URL changes (some sites change content without touching history API) let lastHref = location.href; setInterval(() => { if (location.href !== lastHref) { lastHref = location.href; updateUrlDisplay(); } }, 800); })();