Javascript 使用Cookie通过math.random更改网页

Javascript 使用Cookie通过math.random更改网页,javascript,html,cookies,Javascript,Html,Cookies,我正在寻找一种方法来改变网页通过一个列表,而不会得到相同的网页两次。我已经尝试过洗牌列表,但是当加载一个新页面时,它只是重新加载脚本。所以我想我需要用一些饼干。然而,我对javascript还是相当陌生的。有人能帮我吗 我在想这样的事情,只是用一块饼干: var pages = ['sang1.html','sang2.html','sang3.html','sang4.html','sang5.html','sang6.html','sang7.html','sang8.html','sang

我正在寻找一种方法来改变网页通过一个列表,而不会得到相同的网页两次。我已经尝试过洗牌列表,但是当加载一个新页面时,它只是重新加载脚本。所以我想我需要用一些饼干。然而,我对javascript还是相当陌生的。有人能帮我吗

我在想这样的事情,只是用一块饼干:

var pages = ['sang1.html','sang2.html','sang3.html','sang4.html','sang5.html','sang6.html','sang7.html','sang8.html','sang9.html','sang10.html','sang11.html','sang12.html','sang13.html','sang14.html','sang15.html','sang17.html','sang18.html','sang19.html','sang20.html','sang21.html''sang22.html','sang23.html','sang24.html','sang25.html','sang26.html','sang27.html','sang28.html','sang29.html','sang30.html','sang31.html','sang32.html''sang33.html','sang34.html','sang35.html'];
var page = Math.floor((Math.random() * pages.length) + 1);
window.location.href = pages[page];
pages.splice(page);

这里是一个使用本地存储的基本解决方案,因为由于往返的原因,cookies不是一个好主意

var pages = ['sang1.html', 'sang2.html', 'sang3.html', 'sang4.html', 'sang5.html', 'sang6.html', 'sang7.html', 'sang8.html', 'sang9.html', 'sang10.html', 'sang11.html', 'sang12.html', 'sang13.html', 'sang14.html', 'sang15.html', 'sang17.html', 'sang18.html', 'sang19.html', 'sang20.html', 'sang21.html'];
var page, visitedPages = JSON.parse(localStorage.getItem("visitedPages"));
if (visitedPages === null) {
    visitedPages = [];
}
var unVisitedPages = difference(visitedPages, pages);
if(unVisitedPages.length === 0){//All pages visited at once
    //add your logic when all page visited
}
else{
    page = unVisitedPages[Math.floor(Math.random() * unVisitedPages.length)];
    localStorage.setItem("visitedPages", JSON.stringify(visitedPages.push(page)));
    window.location.href = page; //append if you want to kill cache"?ck="+new Date().getTime()
} 

function difference(a,b){//b -a
    var c = [];
    for(var i=0; i< b.length; i++){
        if(a.indexOf(b[i]) === -1){
            c.push(b[i]);
        }
    }
    return c;
}
var pages=['sang1.html'、'sang2.html'、'sang3.html'、'sang4.html'、'sang5.html'、'sang6.html'、'sang7.html'、'sang8.html'、'sang9.html'、'sang10.html'、'sang11.html'、'sang12.html'、'sang13.html'、'sang14.html'、'sang15.html'、'sang17.html'、'sang18.html'、'sang19.html'、'sang20.html';
var page,visitedPages=JSON.parse(localStorage.getItem(“visitedPages”);
如果(visitedPages==null){
访问页面=[];
}
var unVisitedPages=差异(已访问页面,页面);
如果(unVisitedPages.length==0){//一次访问所有页面
//在访问所有页面时添加您的逻辑
}
否则{
page=unVisitedPages[Math.floor(Math.random()*unVisitedPages.length)];
setItem(“visitedPages”,JSON.stringify(visitedPages.push(page));
window.location.href=page;//如果要终止缓存,请追加“”,ck=“+new Date().getTime())
} 
函数差(a,b){//b-a
var c=[];
对于(变量i=0;i
我认为使用cookies是个好主意。阅读这里关于如何设置或检索它们的内容,看看LocalStorage API。但这不会删除任何其他页面。它只是直接链接到一个,看起来脚本有问题。因为当它被添加时,它总是加载sang1,然后转到sang2,但是它不会从那里开始。我真的无法解决这个问题。有什么帮助吗?嘿,你能试试最新的解决方案吗?它更直接、更优化。
var pages = ['sang1.html', 'sang2.html', 'sang3.html', 'sang4.html', 'sang5.html', 'sang6.html', 'sang7.html', 'sang8.html', 'sang9.html', 'sang10.html', 'sang11.html', 'sang12.html', 'sang13.html', 'sang14.html', 'sang15.html', 'sang17.html', 'sang18.html', 'sang19.html', 'sang20.html', 'sang21.html'];
var page, visitedPages = JSON.parse(localStorage.getItem("visitedPages"));
if (visitedPages === null) {
    visitedPages = [];
}
var unVisitedPages = difference(visitedPages, pages);
if(unVisitedPages.length === 0){//All pages visited at once
    //add your logic when all page visited
}
else{
    page = unVisitedPages[Math.floor(Math.random() * unVisitedPages.length)];
    localStorage.setItem("visitedPages", JSON.stringify(visitedPages.push(page)));
    window.location.href = page; //append if you want to kill cache"?ck="+new Date().getTime()
} 

function difference(a,b){//b -a
    var c = [];
    for(var i=0; i< b.length; i++){
        if(a.indexOf(b[i]) === -1){
            c.push(b[i]);
        }
    }
    return c;
}