您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
批次打開連結,自訂每批數量、是否從上次進度繼續
当前为
// ==UserScript== // @name 批量打開 reddit 的 r/udemyfreeebies 連結 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 批次打開連結,自訂每批數量、是否從上次進度繼續 // @license GPL-3.0 // @match https://*/* // @grant GM_registerMenuCommand // @author twozwu // ==/UserScript== (function () { 'use strict'; let links = []; let defaultPerClick = parseInt(localStorage.getItem('defaultPerClick')) || 15; let resumeLast = localStorage.getItem('resumeCheck') === 'true'; function createUI() { const panel = document.createElement('div'); panel.style = ` position: fixed; top: 80px; right: 20px; background: #f0f0f0; border: 2px solid #ccc; border-radius: 12px; padding: 15px; z-index: 9999; box-shadow: 0 0 10px rgba(0,0,0,0.2); font-family: sans-serif; `; panel.innerHTML = ` <h3 style="margin: 0 0 10px 0;">🔗 批量開啟設定</h3> <label>每批數量: <input id="perClick" type="number" value="${defaultPerClick}" min="1" style="width: auto;"> </label> <br><br> <label> <input id="resumeCheck" type="checkbox" ${resumeLast ? 'checked' : ''}> 從上次進度繼續 </label> <br><br> <button id="runOpener" style="padding: 5px 10px;">🚀 執行批次開啟</button> <button id="closePanel" style="float:right;">❌</button> `; document.body.appendChild(panel); document.getElementById("closePanel").onclick = () => panel.remove(); document.getElementById("runOpener").onclick = () => { const perClick = parseInt(document.getElementById("perClick").value); const resume = document.getElementById("resumeCheck").checked; localStorage.setItem('defaultPerClick', perClick); localStorage.setItem('resumeCheck', resume); // 儲存勾選狀態 panel.remove(); // 關掉面板 openLinks(perClick, resume); }; } //createUI(); function openLinks(perClick, resume) { const listItems = document.querySelectorAll('.text-neutral-content ul li'); listItems.forEach(li => { const anchor = li.querySelector('a'); if (anchor) { links.push(anchor.href); } }); if (links.length === 0) { alert("⚠️ 找不到連結!"); return; } let i = 0; const savedIndex = parseInt(localStorage.getItem('index') || '0'); if (resume && !isNaN(savedIndex)) i = savedIndex; for (; i < links.length; i++) { if (i % perClick === 0) { const cont = confirm(`目前第 ${i} 個,要繼續嗎?`); if (!cont) { localStorage.setItem('index', i); break; } } const link = links[i]; const win = window.open(link, "_blank", "noopener,noreferrer"); if (win) { win.blur(); window.focus(); } } if (i >= links.length) { localStorage.removeItem('index'); alert("✅ 已打開全部連結!"); } } GM_registerMenuCommand("📂 開啟連結設定面板", createUI); })();