Открывайте 25+ вкладок сразу с помощью JavaScript - PullRequest
0 голосов
/ 07 марта 2011

Я использую 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])
    }
}

1 Ответ

3 голосов
/ 07 марта 2011

Поскольку это кажется очевидным средством разбиения по сценариям, замените функцию 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);
        }
    }
...