0

新しいWebアプリの場合、ユーザーがリンクをクリックしたときの履歴を変更して、URLは変更されますが、ページは再読み込みされません。ページの一部をajaxにロードします。これは簡単に行うことができ、多くの場所で文書化されています(Mozilladiveintohtml5Stack Overflowなど)。

ただし、ユーザーがページをリロードせずにURLを変更できるようにする方法があるかどうか疑問に思っています。たとえば、誰かが同じドメイン内のリンクを提供したり、何らかの理由でURLを手動で入力したいとします。リンクをクリックした場合と同じ方法で、ページをリロードせずに履歴を変更して、新しいページをロードしたいと思います。

これを行う方法はありますか?これが私が考えていたことの要点ですが、魔法の関数、、、getNewURLFromEventおよびpreventUserFromActuallyLeavingPage実装carryOnする必要があります(可能な場合):

window.addEventListener('unload', function(event) {
    var newURL = getNewURLFromEvent(event);

    if (isInThisDomain(newURL)) {
        preventUserFromActuallyLeavingPage();
        window.history.pushState('content', 'title', document.URL);
    } else {
        // Let the user leave (the internet is a free place after all)
        carryOn();
    } 
});

function isInThisDomain(URL) {
    /* Would probably implement some error checking here too */
    var thisDomain = document.URL.match(/:\/\/(.+?)\//)[1],
        thatDomain = URL.match(/:\/\/(.+?)\//)[1]);

    return thisDomain === thatDomain;
}

function getNewURLFromEvent(e) {
    /* Figure out where the user want's to go */
}

function preventUserFromActuallyLeavingPage() {
    /* Since we're changing the content it still looks
        like the user's leaving, but really they haven't
        gone anywhere from the site's perspective */
}

function carryOn() {
    /* Essentially do nothing, but maybe more magic is needed? */
}

これが悪い考えであると感じた場合、それでも可能ですが、なぜそれが悪い考えであるかを説明してください。

ありがとうございました。

4

1 に答える 1

0

URL ハッシュを使用する場合を除き、アドレス バーの値を変更すると、ブラウザーはその場所に移動するように指示されます。この動作を変更することはできません (変更すべきではありません)。これにより、URL クローキングやその他のマルウェアの厄介さに関するワームの缶全体が開かれます。

于 2013-03-19T21:43:49.167 に答える