新しいWebアプリの場合、ユーザーがリンクをクリックしたときの履歴を変更して、URLは変更されますが、ページは再読み込みされません。ページの一部をajaxにロードします。これは簡単に行うことができ、多くの場所で文書化されています(Mozilla、diveintohtml5、Stack 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? */
}
これが悪い考えであると感じた場合、それでも可能ですが、なぜそれが悪い考えであるかを説明してください。
ありがとうございました。