var lsd = {
//需要检测的链接
linkAll: [],
//忽略的链接,关键字匹配
linkIgnore: ['favicon.ico', 'netnr', location.origin],
//跨域代理
cors: ['https://cors.eu.org/', 'https://netnr.zme.ink/api/v1/Proxy?url='],
//并发数
cn: 9,
dc: {
ci: 0,
//总链接数
total: 0,
//当前并发数
ccn: 0,
//输出结果
result: {
success: [],
fail: [],
ignore: []
}
},
//检测结果输出
checkResult: function () {
console.log({
progress: (lsd.dc.result.success.length + lsd.dc.result.fail.length) + '/' + lsd.dc.total,
success: lsd.dc.result.success.length,
fail: lsd.dc.result.fail.length
})
if (lsd.dc.result.success.length + lsd.dc.result.fail.length == lsd.dc.total) {
lsd.result();
}
},
//检测
checkGet: function (url) {
var curl = lsd.cors[lsd.dc.ci++];
if (lsd.dc.ci == lsd.cors.length) {
lsd.dc.ci = 0;
}
var furl = curl + url;
lsd.dc.ccn++;
fetch(furl).then(res => {
var dr = {
url: url,
status: res.status,
curl: curl
};
if (res.status == 200) {
lsd.dc.result.success.push(dr)
} else {
lsd.dc.result.fail.push(dr)
}
lsd.dc.ccn--;
lsd.checkResult();
}).catch(err => {
lsd.dc.result.fail.push({
url: url,
error: err,
curl: curl
})
lsd.dc.ccn--;
lsd.checkResult();
})
},
//初始化
init: function () {
//填充链接
for (var i = 0; i < document.links.length; i++) {
var link = document.links[i].href;
if (lsd.linkIgnore.filter(x => link.toLowerCase().indexOf(x.toLowerCase()) > -1).length == 0) {
lsd.linkAll.push(link);
} else {
lsd.dc.result.ignore.push(link);
}
}
lsd.dc.total = lsd.linkAll.length;
//开始任务
lsd.si = setInterval(function () {
if (lsd.linkAll.length == 0) {
clearInterval(lsd.si);
}
if (lsd.dc.ccn < lsd.cn) {
lsd.checkGet(lsd.linkAll.pop());
}
}, 10)
},
//输出结果
result: function (isstop) {
if (isstop) {
clearInterval(lsd.si);
}
console.log(lsd.dc.result)
},
//坏的输出结果
resultFail: function () {
console.log(lsd.dc.result.fail.map(x => x.url).join('\r\n'))
}
};
lsd.init();