2012-09-04 4 views
2

Je souhaite charger une liste de pages Web séquentiellement, avec Greasemonkey.Comment ouvrir une liste de pages automatiquement et séquentiellement?

var list = array ('http://www.google.com', 'site2', 'site3', 'site4'); 
window.location.href = list[0]; 

Le script devrait fonctionner comme suit: 1 site ouvert, attendez 5 secondes, site ouvert 2, attendez 5, etc.

Je ne sais pas comment faire des sites ouverts le script en séquence, peut-être comparer l'URL réelle à la liste et passer à la suivante?

Répondre

4

This approach, for Chrome, travaillera également en Greasemonkey. Mettez vos sites dans un tableau, comme cela, mais vous devez également configurer votre @include, @exclude, and @match directives sur les sites appropriés.

Mettre le tout ensemble, voici un script complet :

// ==UserScript== 
// @name  Multipage, MultiSite slideshow of sorts 
// @include  http://google.com/* 
// @include  http://site2/* 
// @include  http://site3/* 
// @include  http://site4/* 
// @grant  GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a major design 
    change introduced in GM 1.0. 
    It restores the sandbox. 
*/ 

var urlsToLoad = [ 
    'http://google.com/' 
    , 'http://site2/somepage/' 
    , 'http://site3/somepage/' 
    , 'http://site4/somepage/' 
]; 

/*--- Since many of these sites load large pictures, Chrome's and 
    Firefox's injection may fire a good deal before the image(s) 
    finish loading. 
    So, insure script fires after load: 
*/ 
window.addEventListener ("load", FireTimer, false); 
if (document.readyState == "complete") { 
    FireTimer(); 
} 
//--- Catch new pages loaded by WELL BEHAVED ajax. 
window.addEventListener ("hashchange", FireTimer, false); 

function FireTimer() { 
    setTimeout (GotoNextURL, 5000); // 5000 == 5 seconds 
} 

function GotoNextURL() { 
    var numUrls  = urlsToLoad.length; 
    var urlIdx  = urlsToLoad.indexOf (location.href); 
    urlIdx++; 
    if (urlIdx >= numUrls) 
     urlIdx = 0; 

    location.href = urlsToLoad[urlIdx]; 
} 
+0

Merci pour votre code. Cela fonctionne brillamment. Juste une autre petite question. Existe-t-il un moyen de forcer Firefox à charger à partir de zéro une page Web même si elle se trouve dans le même domaine? Parce que j'ai remarqué que si j'insère dans la liste 2 pages du même site, ça ne marche plus car il ne recharge pas complètement la page et le script GM n'est plus exécuté. – KingBOB

+0

Donnez deux ou plusieurs URL spécifiques là où cela se produit. Sont-ils différents seulement par des ancres ou des hashtags? –

+0

Mise à jour du script pour gérer les "nouvelles" pages chargées par ** WELL BEHAVED ** AJAX. Si cela ne vous arrange pas, veuillez ouvrir une nouvelle question et fournir les URL exactes des pages du problème. –

1

Deux façons que je peux penser pour ce faire sont les suivantes:

En utilisant gm_getvalue, gm_setvalue pour récupérer, stocker l'index du site actuel dans list à la mémoire persistante de g.

ou, en utilisant quelque chose comme:

setTimeout(function(){ 
    window.location.href = (list.length > list.indexOf(window.location.href)) ? list[list.indexOf(window.location.href)+1] : list[0]; 
},5000) 
+0

Merci! Votre code fonctionne comme prévu. ;) – KingBOB

Questions connexes