2017-09-30 1 views
0

Je voudrais faire un script de tampermonkey qui redirige aléatoirement vers des sites Web sans répétition. Une fois que tous les sites Web ont été consultés, je souhaite qu'il y ait une alerte signalant que le script est terminé.Javascript - comment rediriger au hasard vers des sites Web sans répéter?

J'ai utilisé le script d'ici (How to redirect to one out of given set of sites?) mais il répète les sites Web.

Comment est-ce que je devrais faire avec ceci?

// ==UserScript== 
// @name  Cat slideshow 
// @match  https://i.imgur.com/homOZTh.jpg 
// @match  https://i.imgur.com/NMDCQtA.jpg 
// @match  https://i.imgur.com/iqm9LoG.jpg 
// ==/UserScript== 

var urlsToLoad = [ 
    'https://i.imgur.com/homOZTh.jpg', 
    'https://i.imgur.com/NMDCQtA.jpg', 
    'https://i.imgur.com/iqm9LoG.jpg', 
]; 

setTimeout (GotoRandomURL, 4000); 

function GotoRandomURL() { 
    var numUrls  = urlsToLoad.length; 
    var urlIdx  = urlsToLoad.indexOf (location.href); 
    if (urlIdx >= 0) { 
     urlsToLoad.splice (urlIdx, 1); 
     numUrls--; 
    } 

    urlIdx   = Math.floor (Math.random() * numUrls); 
    location.href = urlsToLoad[urlIdx]; 
} 
+0

S'il vous plaît accepter ma réponse si elle vous a aidé. –

Répondre

1

EDIT: correction de la section math.random du code.

Cela devrait fonctionner. Je fais juste une copie du tableau et après avoir navigué à l'url je supprime cette URL du tableau copié. Il ne répétera une URL qu'après avoir parcouru toutes les URL et recommencé.

const urlsToLoad = [ 
    'https://i.imgur.com/homOZTh.jpg', 
    'https://i.imgur.com/NMDCQtA.jpg', 
    'https://i.imgur.com/iqm9LoG.jpg', 
]; 

let copyOfUrlsToLoad = []; 

setTimeout(goToRandomURL, 4000); 

function goToRandomURL() { 
    if (copyOfUrlsToLoad.length === 0) { 
    copyOfUrlsToLoad = urlsToLoad; 
    } 
    urlIdx = getRandomInt(0, copyOfUrlsToLoad.length); 
    location.href = copyOfUrlsToLoad[urlIdx]; 
    copyOfUrlsToLoad.splice(urlIdx, 1); 
} 

// This function comes from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values 
function getRandomInt(min, max) { 
    min = Math.ceil(min); 
    max = Math.floor(max); 
    return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive 
} 

Si vous voulez ouvrir l'URL dans un nouvel onglet ou une fenêtre, this answer dit de remplacer la ligne location.href ce qui suit:

window.open(copyOfUrlsToLoad[urlIdx], '_blank');

+0

Comment cela maintient-il un survol de page vu/invisible? (Je ne vois aucune persistance) – dandavis

+0

Oops: \ It does not. Je suppose que j'ai raté cette partie de la question. Je n'ai aucune expérience avec les scripts de tampermonkey. Mais j'espère que le code que j'ai écrit peut encore aider. –