0

好的,我的代码有点乱,因为我还是一名学习 Javascript 和 HTML 的学生,所以我会尽力解释。

我试图在几个 html 页面上获得一个“继续”链接,以链接到从数组中随机选择的页面。我希望将该页面从数组中取出,然后将该数组保存在 sessionStorage 中,以便下一页的“继续”链接将从数组中随机选择一个不是当前页面或过去页面的链接。

这是我的代码:

var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']

function randomLink(){
if (typeof(Storage)!=="undefined")
{
    if (sessionStorage.links)
    {
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];
        window.location = arraylink;

        var index = storedLinks.indexOf(arrayLink);
        if (index > -1){
            storedLinks.links.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
    }
    else
    {
        sessionStorage.links = JSON.stringify(initialLinks);
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()                            *storedLinks.length)];
        window.location = arraylink;

        var index = storedLinks.indexOf(arrayLink);
        if (index > -1){
            storedLinks.links.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
    }
}
else
{
    document.write("Sorry, your browser does not support web storage.");
}

}

我正在获取我的“继续”链接以链接到随机页面,但这些页面似乎保留在数组中。任何帮助将不胜感激。另外,我提前为我的草率道歉:)

4

3 回答 3

0

我猜这个

window.location = arraylink;

加载新文档并阻止所有其余的 javascript 发生。在对 sessionStorage 的每个读写操作后面放置一个 alert(sessionStorage.links) 以确保。

于 2013-12-06T18:51:00.410 回答
0

仔细观察,我还注意到其他一些错误——arrayLink 在 window.location=arraylink 中是用小写 L 编写的,但在其他地方是大写的。此外,storedLinks.links.splice(index, 1); 应该存储Links.splice(index, 1); (没有.links)。而且,一旦您访问了所有页面,您将尝试加载“未定义”页面,因为您没有重新初始化您的数组。

这对我有用(记得把它保存到你所有的文件名中):

<script>

var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']

function randomLink(){
if (typeof(Storage)!=="undefined")
{
    if (sessionStorage.links)
    {
        alert("reading(1) "+sessionStorage.links);
        var storedLinks = JSON.parse(sessionStorage.links);
        if (storedLinks.length==0) {
            storedLinks=initialLinks;
        }
        var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];

        var index = storedLinks.indexOf(arraylink);
        if (index > -1){
            storedLinks.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
        alert("saved(1) "+sessionStorage.links);
        window.location = arraylink;
    }
    else
    {
        sessionStorage.links = JSON.stringify(initialLinks);
        alert("reading(1) "+sessionStorage.links);
        var storedLinks = JSON.parse(sessionStorage.links);
        var arraylink = storedLinks[Math.floor(Math.random()                            *storedLinks.length)];

        var index = storedLinks.indexOf(arraylink);
        if (index > -1){
            storedLinks.splice(index, 1);
        }
        sessionStorage.links = JSON.stringify(storedLinks);
        alert("saved(2) "+sessionStorage.links);
        window.location = arraylink;
    }
}
else
{
    document.write("Sorry, your browser does not support web storage.");
}
}
</script>

<a href="javascript:randomLink()">Follow Link</a>
于 2013-12-07T07:00:29.500 回答
0

sessionStorage 数据仅在页面打开时持续。请改用 localStorage。

此外,您需要在设置 window.location 之前拼接您的数组。如果您跳到块中间的另一个页面,您的脚本将无法完成执行。

我稍微清理了你的代码,现在它对我有用。这个给你:

function randomLink() {

    if (typeof window.localStorage !== 'undefined') {

        // Create links initially if non-existent.
        if (typeof localStorage.links === 'undefined') {
            localStorage.links = JSON.stringify(initialLinks);
        }

        // Get links.
        var storedLinks = JSON.parse(localStorage.links);

        // Select random link.
        if (storedLinks.length > 0) {
            var randomIndex = Math.floor(Math.random()*storedLinks.length);
            var arraylink = storedLinks[randomIndex];

            // Remove the link from the array.
            storedLinks.splice(randomIndex, 1);

            // Update the saved link.
            localStorage.links = JSON.stringify(storedLinks);

            // Now go to the link.
            window.location = arraylink;
        }
        else {
            alert('All out of links!');
        }
    }
    else {
        document.write("Sorry, your browser does not support web storage.");
    }
}

randomLink();
于 2013-12-07T08:00:00.440 回答