2017-09-30 48 views
0

我想作出這樣的隨機重定向到網站不重複tampermonkey腳本。一旦所有的網站都被瀏覽過,我希望有一個警報通知腳本已經完成。Javascript - 如何隨機重定向到網站而不重複?

我從這裏(How to redirect to one out of given set of sites?)所使用的腳本,但它重複的網站。

我應該如何去了解這件事?

// ==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

請接受我的答案,如果它幫你。 –

回答

1

編輯:修復了代碼的math.random部分。

這應該工作。我只是做了數組的副本,然後導航到該URL後,我從複製的數組中刪除該URL。它只會在遍歷所有網址並重新開始後重復一次網址。

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 
} 

如果你想在一個新的標籤或窗口中打開鏈接,this answer說,與下面的更換location.href行:

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

+0

,這如何保持看到/看不見的頁面翻轉? (我看沒有持久性) – dandavis

+0

哎呀:\事實並非如此。我想我錯過了這部分問題。我對tampermonkey腳本沒有任何經驗。但希望我寫的代碼仍然可以幫忙。 –