批量打開 reddit 的 r/udemyfreeebies 連結

批次打開連結,自訂每批數量、是否從上次進度繼續

目前為 2025-05-06 提交的版本,檢視 最新版本

// ==UserScript==
// @name         批量打開 reddit 的 r/udemyfreeebies 連結
// @namespace    http://tampermonkey.net/
// @version      0.11
// @description  批次打開連結,自訂每批數量、是否從上次進度繼續
// @license      GPL-3.0
// @match        https://*/*
// @grant        GM_registerMenuCommand
// @author       twozwu
// ==/UserScript==

let links = [];
let defaultPerClick = parseInt(localStorage.getItem('defaultPerClick')) || 15;
let indexKey = localStorage.getItem('indexKey') || 0;
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>
            <label>
                <input id="isStart" type="checkbox" >從第
                <input id="indexKey" type="text" value="${indexKey}" style="width: 4rem;">
            個連結開始</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 = () => {
        links.length = 0;
        panel.remove();
    };
    document.getElementById("resumeCheck").onclick = () => {
        const resume = document.getElementById("resumeCheck").checked;
        localStorage.setItem('resumeCheck', resume);
    };
    document.getElementById("runOpener").onclick = () => {
        const perClick = parseInt(document.getElementById("perClick").value);
        const resume = document.getElementById("resumeCheck").checked;
        const isStart = document.getElementById("isStart").checked;
        if (isStart) {
            indexKey = document.getElementById("indexKey").value;
            localStorage.setItem('indexKey', indexKey);
        }
        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');

    if(!links.length) {
        listItems.forEach(li => {
            const anchor = li.querySelector('a');
            if (anchor) {
                links.push(anchor.href);
            }
        });
    }
    console.log(links.length);

    if (links.length === 0) {
        alert("⚠️ 找不到連結!");
        return;
    }

    let i = 0;
    const savedIndex = parseInt(localStorage.getItem('indexKey') || '0');
    if (resume && !isNaN(savedIndex)) i = savedIndex;
    let isStart = document.getElementById("isStart");
    if (isStart) isStart.checked = false;

    for (; i < links.length; i++) {
        if (i % perClick == 0) {
            const cont = confirm(`目前第 ${i} 個,要繼續嗎? \n 總共有 ${links.length} 個連結`);
            if (!cont) {
                localStorage.setItem('indexKey', i);
                //links.length = 0;
                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('indexKey');
        alert("✅ 已打開全部連結!");
    }
}

GM_registerMenuCommand("📂 開啟連結設定面板", createUI);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址