我正在使用javascript打开网站上图片的所有链接。但是在打开大约25个标签后脚本停止了,这可能是由Chrome引起的。我试过Firefox,但它冻结了(所以我甚至不敢在IE中尝试它)。我试图使脚本在每个选项卡之间等待500毫秒,但除了使脚本变慢之外,这没有任何改变。
有关如何解决此问题的任何建议?可能有一些方法只能在前一个选项卡完全加载时打开下一个选项卡吗?
function in_array(needle, haystack) {
var key = '';
for (key in haystack) {
if (haystack[key] == needle) {
return true
}
}
return false
}
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
var allLinks = document.links;
var allHrefs = [];
var openedWindows = [];
var x = 0;
var y = 0;
for (var i = 0; i < allLinks.length; i++) {
if (allLinks[i].href.match(/\.(jpg|png|jpeg|gif|bmp)$/i)) {
allHrefs[x] = allLinks[i].href;
x++
}
}
for (var i = 0; i < allHrefs.length; i++) {
if (!in_array(allHrefs[i], openedWindows)) {
openedWindows[y] = allHrefs[i];
y++;
sleep(500);
window.open(allHrefs[i])
}
}
答案 0 :(得分:3)
由于它似乎是明显的脚本断断器,因此请更换您的sleep()
功能,并将setInterval
或setTimeout
替换为您的链接开启功能。您可以将上一个循环更改为此类
for (var i = 0; i < allHrefs.length; i++) {
if (!in_array(allHrefs[i], openedWindows)) {
openedWindows[y] = allHrefs[i];
y++;
setTimeout(window.open(allHrefs[i]), 500);
}
}