ディープリンクを可能にする写真のスライドショーを作成しています。ユーザーがスライドショーを進めると、URL バーのアンカー タグも更新され、誰かがアンカー タグのある URL にアクセスすると、そのスライドが最初に表示されます。URL の例:
http://domain.com/news/some-article-slug/#/slide5
window.location.hash
オブジェクトに渡すだけでこれを行っています。
start: window.location.hash.substring(7), // eg. "#/slide5"
// ...
var startingSlide;
this.start = 0;
this.deeplink = this.options.start != null;
if (this.deeplink) {
startingSlide = Number(this.options.start);
if (startingSlide > 0 && startingSlide <= this.total) {
// use that number as the starting slide
}
}
// ...
this.slides.bind("switch", function(idx) {
if (_this.deeplink) {
return window.location.hash = "/slide" + (idx + 1);
}
});
これはすべてうまく機能します。私の問題は次のとおりです。
ユーザーがスライドを見て URL アンカーが更新されると、これはすべてブラウザーの履歴に登録されるため、ブラウザーの [戻る] ボタンを使用すると、アンカーを介して戻るだけです。私がやりたいのは、戻るボタンが最後に読み込まれたページに戻ることです。
Imgur には、私が探している正確な動作があります。実際の例を次に示します。
ただし、Imgur の JavaScript はすべて圧縮されているため、どのように実行されているかを読んでもわかりません。
ありがとう!
アップデート
私はこのようなものを使用して終了しました:
var slidePath;
if (this.deeplink) {
slidePath = [window.location.pathname, "/slide" + (idx + 1)].join("#");
window.history.replaceState(null, window.title, slidePath);
}
いくつかの理由から、History.js を使用しないことにしました。これ以上 JS ライブラリを自分のページに含めないようにしています。古いブラウザーがサポートされていないことは、私には問題ありません。