var dld = { //跨域代理 proxyServer: [ "https://cors.eu.org/", "https://api.netnr.eu.org/link/", "https://api.codetabs.com/v1/proxy?quest=", "https://netnr.zme.ink/api/v1/Proxy?url=" ], proxyIndex: 0, proxyGet: (link) => { let ps = dld.proxyServer[dld.proxyIndex++]; if (dld.proxyIndex >= dld.proxyServer.length) { dld.proxyIndex = 0; } return `${ps}${encodeURIComponent(link)}`; }, checkLinks: document.links, checkIndex: 0, checkMax: 6, // 并发 checkPending: [], resultOk: [], resultBad: [], init: () => { dld.start(); }, start: () => { // 开始检测一个链接 const link = dld.checkLinks[dld.checkIndex]; const url = dld.proxyGet(link); const promise = fetch(url).then(resp => { if (resp.ok) { dld.resultOk.push(resp); } else { dld.resultBad.push(link); } }).catch(error => { dld.resultBad.push(link); }).finally(() => { //完成代办 dld.checkPending.splice(dld.checkPending.indexOf(promise), 1); console.debug(`ok: ${dld.resultOk.length}, bad: ${dld.resultBad.length}, progress: ${(dld.checkIndex + 1) - dld.checkPending.length}/${dld.checkLinks.length}`); //结束 if (dld.checkIndex + 1 == dld.checkLinks.length && dld.checkPending.length == 0) { console.debug(dld.resultBad.join('\r\n')); } else if (dld.checkIndex + 1 < dld.checkLinks.length && dld.checkPending.length < dld.checkMax) { // 检测下一个链接 dld.checkIndex++; dld.start(); } }); //加入代办 dld.checkPending.push(promise); // 检测下一个链接 if (dld.checkIndex + 1 < dld.checkLinks.length && dld.checkPending.length < dld.checkMax) { dld.checkIndex++; dld.start(); } } }; dld.init();