私が取り組んでいるサイトの基本的なルーティング機能を構築しました。
受信 URL をチェックしてから、ブラウザーをサイトの適切な部分に送信するという考え方です。
着信 URL がプッシュ先の URL と同じ場合、pushState が起動しないことに気付きました。つまり、行ってdomain.com/journal
も発火しません。URL は、ルーターがプッシュすることになっている URL と同じです: History.pushState({ id: 'journal' }, site.title+' — '+'Journal', site.url+'/journal' );
)。
しかし、domain.com/journal/
代わりに置くと、発火します。何故ですか?
簡素化された宛先コード
setTimeout(function() {
uri = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1');
if(uri === 'journal') {
uri = window.location.pathname.split( '/' );
if(uri[2]) {
History.pushState({ id: 'post', no: uri[2] }, site.title+' — '+'Journal', site.url+'/journal/'+uri[2] );
} else {
History.pushState({ id: 'journal' }, site.title+' — '+'Journal', site.url+'/journal' );
}
} else if(uri === 'contact') {
History.pushState({ id: 'contact' }, site.title+' — '+'Contact', site.url+'/contact' );
} else {
History.pushState({ id: 'gallery' }, site.title, site.url );
}
}, 1);
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
var State = History.getState(); // Note: We are using History.getState() instead of event.state
Roots.common.history(State);
}
history: function(State) {
navigate(State.data.id, State.data.no);
},
navigate: function(section, no) {
if(section === 'gallery') {
// do gallery stuff
} else if(section === 'journal') {
// do journal stuff
} else if(section === 'contact') {
// do contact stuff
} else if(section === 'post') {
// do post stuff
}
}