批次打開連結,自訂每批數量、是否從上次進度繼續
当前为
// ==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);
})();