Как заставить Greasemonkey открывать много ссылок в новых вкладках одну за другой?

Есть несколько ссылок, которые выглядят как выше

> <td><a href="http://Lucifase.com/pages/2000.php?refid=2000"
> target="_blank">2000</a><br></td> <td><a
> href="http://Lucifase.com/pages/3000.php?refid=3000"
> target="_blank">3000</a><br></td> <td><a
> href="http://Lucifase.com/pages/4000.php?refid=4000"
> target="_blank">4000</a><br></td> <td><a
> href="http://Lucifase.com/pages/5000.php?refid=5000"
> target="_blank">5000</a><br></td> <td><a
> href="http://Lucifase.com/pages/6000.php?refid=6000"
> target="_blank">6000</a><br></td>

И я останавливаюсь на первом шаге. Я не могу открыть каждый из них с помощью триггера сценария. Вот что у меня есть до сих пор:

 setTimeout(function() {
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
                       0, 0, 0, 0, 0,
                       false, false, false, false,
                       0, null);
 var links = document.getElementsByTagName('a');
             if(links.href.search('refid') >= 0)

    links.dispatchEvent(evt);
 }, 1000);

Но это не работает, также не знаю, как заставить их открываться в новой вкладке по одному.


person Lucifase    schedule 23.05.2012    source источник


Ответы (2)


Что значит по одному? Кажется, что «нажимать» на все ссылки одновременно нормально?

Со ссылками, должно быть, просто следуйте href вместо того, чтобы пытаться отправить событие клика. Следующий код должен открыть только те вкладки, которые вы хотите:

var linksToOpen = document.querySelectorAll ("td > a[href*='refid']");
for (var J = 0, numLinks = linksToOpen.length;  J < numLinks;  ++J) {
    window.open (linksToOpen[J].href, '_blank');
}


Обновление для разъяснения OP:
Открыть ссылки с задержкой между каждой немного сложнее. Такой код сделает это:

var linksToOpen = document.querySelectorAll ("td > a[href*='refid']");

//--- linksToOpen is a NodeList, we want an array of links...
var linksArray  = [];
for (var J = 0, numLinks = linksToOpen.length;  J < numLinks;  ++J) {
    linksArray.push (linksToOpen[J].href);
}

openLinksOnDelay (linksArray);

function openLinksOnDelay (linkArray) {
    //--- Pop the first link off the array...
    var linkToOpen  = linkArray.shift ();
    if (linkToOpen)
        window.open (linkToOpen, '_blank');

    //--- Open the next of the remaining links after a delay.
    if (linkArray.length) {
        setTimeout ( function() {
                openLinksOnDelay (linkArray);
            },
            1000    //--- 1 second.  Use 60000 for 1 minute.
        );
    }
}
person Brock Adams    schedule 23.05.2012
comment
о, вы правы! Я не ясно выражаюсь, моя ошибка. Я хочу, чтобы скрипт открывал одну ссылку, а затем открывал следующую ссылку, между ссылками есть перерыв по времени. Я бы хотел, чтобы время перерыва можно было установить самостоятельно, пару минут Думаю, кстати, спасибо за помощь, этот скрипт тоже работает! - person Lucifase; 24.05.2012
comment
Хорошо, посмотрите обновленный ответ о том, как установить временную задержку между открытием ссылки. - person Brock Adams; 24.05.2012
comment
ОМГ! Это работает! Вы - гений!!! Я беру часть оригинального сценария (td › a[href*='refid']), тогда он выглядит так здорово ^^ - person Lucifase; 24.05.2012
comment
Пожалуйста! Извините за опечатку, но здорово, что вы все-таки разобрались. - person Brock Adams; 24.05.2012

Должны ли это быть щелчки мыши или он может открывать ссылки с помощью этого:

for(i=0;i<document.links.length;i++) {
  if(document.links[i].target != "_blank"){
     window.open(
       document.links[i].href,
       '_blank'
     );
  }
}
person Steven10172    schedule 23.05.2012
comment
Хммм, вроде работает, можно открыть с помощью window.open. Но ссылок с таргетом _blank тоже много, открывать не хочу. Как я могу их отфильтровать? - person Lucifase; 23.05.2012