質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

575閲覧

pushStateメソッドの挙動について

theplace

総合スコア24

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/12/22 01:06

編集2019/12/24 21:50

以下のHTMLとJavaScriptを書きました。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="button" id="btn"> <span id="result">ー</span>回クリックされました <script> var count = 0; var result = document.getElementById('result'); document.getElementById('btn').addEventListener('click',function(){ result.textContent = ++count; history.pushState(count,null,'/js/chap07/count/' + count); }); window.addEventListener('popstate',function(e){ count = e.state; result.textContent = count; }); </script> </body> </html>

テキストによれば、戻るボタンを押すと、カウンターの更新が前に戻るようです。
こちらの質問を参考に、いったんグーグルのページにアクセスしてから、ローカルに作成したHTMLファイルにアクセスし「戻る」ボタンが押せるようにして、実際に押したところ、単純にグーグルのページに戻ってしまいました。
これは何が原因なのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

これは何が原因なのでしょうか。

ページ遷移を発生したときにURLが変わりますが、ブラウザはそのURLを履歴として保持します。原因は、その履歴に合わせて表示内容を変えたことにあります。

ご質問のコードでは ブラウザに実装されている History API を使っています。

が、参考になるかと思います。


テキストによれば

その表現では具体性に欠くため、回答者には通じないです。

  1. ネット上のどこかに転がっている情報
  2. 名称も明かされない書籍
  3. 誰かに渡された雑記

削除箇所
(質問文中の誤リンクを指摘。訂正確認した為)


メソッドやプロパティは 「MDN methodName」や「MDN propertyName」の2語で検索すると、仰るところの「テキスト」には無い詳細を知ることができるかもしれません。

投稿2019/12/22 05:03

編集2019/12/25 02:17
AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

theplace

2019/12/24 21:52

ありがとうございます。 リンク先(=「こちらの質問」)が間違っていたので、修正しました。 紹介していただいたMDNのページを拝見しました。 「history.pushStateメソッドを使えば、ブラウザの履歴にクリックイベント等の履歴を意図的に追加することができる」と解釈しています(テキスト(JavaScript本格入門)にそのようなことが記載されていたため、そう思いました)。 ブラウザの「戻る」ボタンを押した時に、カウンターの数値を1つ前に戻すだけの状態に戻すということは、history.pushStateメソッドにより可能なのでしょうか。
AkitoshiManabe

2019/12/25 02:12

「javascript history.pushState」の2語て検索すると、ブラウザに実装されたばかりの 2015 年のブログ記事がヒットします。履歴の操作に関しては、それ以前からある go(), back(), foward() の挙動確認も行うと疑問を解決できるかもしれません。
theplace

2019/12/26 21:29

go(), back(), foward() の挙動は以下のようなサイトを参考に確認しました。 http://www.htmq.com/js/history_back.shtml ブラウザの戻るボタンを押した時に、上記3つのような挙動ではなく、単にカウンターの数値のみを戻すようにすることをテキストでは実現されているようですが、実際にはそうしたことはhistory.pushStateではできないのでしょうか?
guest

0

なにが原因ってそれが正常な動作じゃないかと。
そこから進むボタン押したらどーでしょう

投稿2019/12/22 01:12

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

theplace

2019/12/22 01:21

戻ってから、進むボタンを押したところ、 「ー回クリックされました」という一番最初の状態に戻っていました。 テキストによれば、正常にプログラムが動けば、戻るボタンを押すとカウンターの更新が前に戻るようなのですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問