0

OK、私はまだ 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

よく見ると、他のエラーにも気付きました.arrayLinkはwindow.location = arraylinkでは小文字のLで書かれていますが、他の場所では大文字で書かれています。また、 storedLinks.links.splice(index, 1); storedLinks.splice(index, 1); にする必要があります。(.link なし)。そして、すべてのページにアクセスしたら、配列を再初期化しないため、「未定義」のページを読み込もうとします。

これは私にとってはうまくいきます(すべてのファイル名に保存することを忘れないでください):

<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 に答える