最初に私はpushState関数の最初のパラメータが何であるのか分かりませんでしたか?私はそれに何を渡すのですか?私は単に私のページをスクロールするときにURLを変更したい。私はビューポート内の現在の要素のIDを照会しており、そのIDもURL内のリンクである必要があります。それは下のコードで正常に動作します。私は私のページをスクロールしたときにアドレスバーにURLが正常に変更今HTML5/jQuery:pushStateとpopState - ディープリンク?
1):
var currentHash,
url;
if (history && history.pushState) {
$(window).scroll(function() {
hash = $('.layer:in-viewport').attr('id');
catHash = $("#"+hash).parent('section').attr('id');
var data = "nothing";
if (catHash != undefined)
url = "/" + catHash + "/" + hash;
else
url = "/" + hash;
if (currentHash != hash) {
window.history.pushState(data, hash, url);
}
currentHash = hash;
});
}
は今、私は2つの質問があります。最初にページを読み込むときに、どのようにアドレスバーのURL /ハッシュをクエリできますか。だから私は今のようなリンクを持っていると想像してくださいwww.url.com/deep
私は/奥が何であるかを知りたいですか? top.location全体をクエリし、それぞれの "/"で分割するだけでいいですか?私はそれらのリンクが実際に存在しないことを意味するので、pushState関数で操作したURLを呼び出すときに404ページを避けるにはどうすればよいですか?
2.)戻るボタンをクリックしたときにアドレスバーの最後の変更を確認するにはどうすればよいですか?だから私は/deep
をブラウザのバックボタンをクリックすると見つけたいので、私はそのページのその位置に戻ることができます。おそらくこれはポップステートで動作していると思いますが、私はどのように見つけられませんでした!
ありがとうございました!
更新:
window.history.pushState("test", hash, url);
...
$(window).bind('popstate', function(event){
console.log(event.data);
});
これはなかれnullです。これは "テスト"を返してはいけませんか?
'event.state'ない' event.data' – Quentin
ええ、私はそれを試みたが、ときに私 'コンソールなし' event.state'はありません.log(event); 'データだけですが、データも常に「null」です。また、' event.state'をログに記録しようとすると、常にnullになります! – matt
OK、解決策を見つけました... '$(window).bind( 'popstate'、function(event){'は動作しませんが、 'window.onpopstate = function(event){'はしますか? – matt