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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Q&A

解決済

1回答

2760閲覧

特定の条件の時にブラウザバックを禁止させたい。

ty_tech

総合スコア1

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

0グッド

0クリップ

投稿2021/01/30 08:36

js初心者です。
調べながらやってみたものの解決できず、投稿させて頂きました。

jsのコード

$(function () { // 元のURLを取得&"/"で分解 var referrer = document.referrer.split('/'); var targetWord = 'confirm'; // referrer内に"confirm"が含まれていれば、インデックス番号を格納 var inValue = referrer.indexOf(targetWord); if (inValue >= 0) { history.pushState(null, null, null); window.addEventListener("popstate", function () { var result = window.confirm('確認画面には戻れません。トップページにリダイレクトしますか?'); if (result) { location.href = "http://localhost:3000/"; } else { history.pushState(null, null, null); } }) } });

実現したいこと

直前のURL履歴内に特定のワードが入っている場合に限り、ブラウザバックさせないようにしたい。

【現状】

関係ない箇所でブラウザバックの禁止が効いてしまいます。
具体的には、

ページ遷移の順番: new画面 → confirm画面 → show画面(ここでブラウザバック)の時

show画面からconfirm画面にブラウザバックしようとすると、想定通りにウィンドウが表示されて(キャンセル=現在のURL画面を表示 ・ OK=リダイレクト)の動きになっておりますが、

ページ遷移の順番: new画面 → confirm画面 → show画面 → user一覧画面 → その他の画面(ここでブラウザバック)の時

その他の画面からuser一覧画面にブラウザバックしようとする時も、ウィンドウが表示されてしまいます(キャンセル=user一覧画面を表示 ・ OK=リダイレクト)の動き。

キャンセル押して表示されたuser一覧画面でブラウザバックしようとする時も、ウィンドウが表示されて(キャンセル=現在のURL画面(yser一覧画面)を表示 ・ OK=リダイレクト)の動き。

伝わり難くて申し訳ないです。。
history関連かと思い調べておりましたが、どこが悪いのか分からずご教授頂きたいです。

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

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

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

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

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

m.ts10806

2021/01/30 08:44

厳密に制御することはできませんし、労力に見合った結果は出ない対応ですが、それでもやる理由は何でしょうか。
ty_tech

2021/01/30 09:08

m,ts10806さん 投稿後にブラウザバックするとエラー画面(以下)が出てくるので、ブラウザバックさせない方がいいのかな?と感じたためです。 ActiveRecord::RecordNotFound in PostsController#show Couldn't find Post with 'id'=confirm :厳密に制御することはできません そうだったんですね。。ブラウザバックに関して初めてやってみたので知らないことばかりでした。
hoshi-takanori

2021/01/31 08:12

ブラウザの戻るボタンを禁止するのはユーザーの利便性を損なうので、「投稿後にブラウザバックするとエラー画面が出てくる」というバグを修正するにはどうしたら良いかという方向性で考えることをお勧めします。
think49

2021/02/01 08:54

むしろ、[戻る] でエラーになるのは正しい動作なのでは? 最も、「ActiveRecord::RecordNotFound in PostsController#show」なとどいう英語メッセージではユーザには伝わらん云々なら、エラーメッセージを修正する余地はありますが。
ty_tech

2021/02/01 13:06

hoshi-takanoriさん ありがとうございます。 開発者都合でブラウザバックの禁止はやめた方が良さそうですね。。
ty_tech

2021/02/01 13:08

think49さん ありがとうございます! なるほど!エラーメッセージを修正もあるんですね。 知りませんでした。
think49

2021/02/01 22:33

どうしても、[戻る] を禁止したいのなら、XHR/fetchでページ遷移が発生しない挙動にするのが妥当と考えます。 ブラウザのデフォルトの挙動を改変することは、ユーザが自然な挙動を期待する時に理解を困難にします。 多くの一般ユーザはブラウザの元々の挙動を期待します。
ty_tech

2021/02/03 05:32

think49さん ありがとうございます! ユーザーが分かりやすいように、エラーメッセージを表示させることで解決致しました!
guest

回答1

0

自己解決

ブラウザバックの禁止をやめて、エラーページを表示させることで解決しました。
参考:
https://qiita.com/mr-myself/items/c2f4fb2e5dcee6a336f3#comment-23298b703d75b7d27487

投稿2021/02/03 05:34

ty_tech

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問