var dld = { //跨域代理 proxyServer: ['https://cors.eu.org/', 'https://api.netnr.eu.org/link/', '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)}`; }, resultOk: [], resultBad: [], checkLinks: document.links, checkIndex: 0, checkMax: 3, checkPending: [], 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();