\n\n\n \n \n```","dateModified":"2023-04-13T08:29:26.229Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-5a25l2u7po96d6","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}},{"@type":"Comment","author":{"@type":"Person","name":"eisaku123","url":"https://teratail.com/users/eisaku123"},"datePublished":"2023-04-13T08:08:58.761Z","text":"#13\nyambejpさん、結論を述べていただきありがとうございます。\nもう少しあがいてみてます。","dateModified":"2023-04-13T08:08:58.761Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-8wy2kq5g99rgak","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@type":"Comment","author":{"@type":"Person","name":"yambejp","url":"https://teratail.com/users/yambejp"},"datePublished":"2023-04-13T08:05:45.056Z","text":"#13\n> OKボタンを人が押すと戻るボタンが起動しない制御になる仕組み\n\nそういう想定で例示しましたが、そうなっていませんか?\n別にOKで閉じることが目的ではなく、画面上の何かをクリックしたら\npushStateした挙動が有効になるということです。\n\n> 人を介さない方法はあるのでしょうか?\n\n強制的にdialogのbuttonをclickしても、触ったことにはならないのでだめですね\nそもそも「人を介すことが必須」だからこういうUXになっているわけですから\nあくまでも姑息な手段ということなので。\n\nたとえばdialogでなくても、なにかアイコン的なものをだして、\n「クリックしたらスタートします」のような仕組みにすれば挙動は同じでしょう","dateModified":"2023-04-13T08:10:31.444Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-hhqcqi9cbtd56g","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}},{"@type":"Comment","author":{"@type":"Person","name":"eisaku123","url":"https://teratail.com/users/eisaku123"},"datePublished":"2023-04-13T07:56:13.736Z","text":"#11\nyambejpさんご提示ありがとうございます。\nご提示いただいた「画面でOKボタンを押してください」のOKボタンを人が押すと戻るボタンが起動しない制御になる仕組みでよろしいでしょうか。\nこの方法は良いアイデアで私も案は浮かんでました。\n\n人を介さない方法はあるのでしょうか?\n\n\n\n","dateModified":"2023-04-13T07:56:13.736Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-a9hkinne68lx38","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@type":"Comment","author":{"@type":"Person","name":"pippi19","url":"https://teratail.com/users/pippi19"},"datePublished":"2023-04-13T07:54:57.584Z","text":"#10\n>「全環境でネイティブ機能を抑える事はできないからです。」\n> とおっしゃられてますが、chromeとsafalyは抑えることはできるのでしょうか?\n\nWin/Mac/iOS/Androidの純粋な最新版Chrone、\nMac/iPhoneのSafariのみに限定(派生系やWebViewなどを含まない)すればやり方はあるかもしれません。\n\n個人的には厳しいように思いますが、他の方の回答を参考にしてください。\n\n> しかし、開発が半分以上、進んでしまい、手戻りするには容易ではない状況になりつつあります。\n\nであれば荒技ですが、\nいっそのこと1枚のページ内にiframeでそのWebアプリを埋め込んでしまえば理論上戻れなくなりますね。\n右クリックできなくすればより戻りにくくなると思います。\n","dateModified":"2023-04-13T07:54:57.584Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-q5z2vfkbp600ib","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@type":"Comment","author":{"@type":"Person","name":"yambejp","url":"https://teratail.com/users/yambejp"},"datePublished":"2023-04-13T07:23:48.971Z","text":"#10\n\n一応私の案に少し興味がありそうですので、具体的にはこんなかんじ\n```javascript\n\n\n\n \n \n\n```","dateModified":"2023-04-13T07:29:28.523Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-lwpgu9y8fbrc9p","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}},{"@type":"Comment","author":{"@type":"Person","name":"eisaku123","url":"https://teratail.com/users/eisaku123"},"datePublished":"2023-04-13T07:06:21.087Z","text":"皆様、ありがたい、アドバイスありがとうございます。\nまず、yambejpさんのご提案(自動でボタンを押させる)で以下のコードを書きました。\n結果は戻ってしまいました。泣く\n\nそこでボタンが効いているかどうか、手動で押すと、戻らなくなります。\n他の記述方法はあればご教示お願いします。\n\n```ここに言語を入力\nwindow.onload = function() {\n document.getElementById(\"abc\").click();\n console.log(\"ボタンが押されましたよ\");\n};\n \nwindow.addEventListener('load', function() {\n // 履歴を変更する\n window.history.pushState(null, \"\", window.location.href);\n // ブラウザーの「戻る」ボタンを無効にする\n window.onpopstate = function() {\n window.history.pushState(null, \"\", window.location.href);\n };\n});\n```","dateModified":"2023-04-13T07:06:21.087Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-c4y9yvxt89k76h","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@type":"Comment","author":{"@type":"Person","name":"pippi19","url":"https://teratail.com/users/pippi19"},"datePublished":"2023-04-13T06:05:13.883Z","text":"#5\n> TwitterのようなSPA仕様でも戻るボタンで前のページに戻れるような気がするのは気のせいでしょうか?\n\n気のせいではありません。\nTwitterはSPAですので、意図的に戻れるようにしています。\n\n私が提案したのは**SPAに近い実装**です。\nあくまで1ページ内での要素の書き換え、物理遷移も仮想繊維もさせない実装という提案です。\n\n> SPAだからといってその無くす概念が正しいともいえない、寧ろ、あったほうがいいように思うのですが、、、\n\nはい、一般論で言えばUX観点ではその通りだと思います。\nただし今回は質問者による下記の要件がありますので。\n\n> 実現したいことは「ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい」","dateModified":"2023-04-13T06:05:13.883Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-i2uyhnth87tqmw","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}},{"@type":"Comment","author":{"@type":"Person","name":"miyabi_takatsuk","url":"https://teratail.com/users/miyabi_takatsuk"},"datePublished":"2023-04-13T05:18:11.439Z","text":"現状、いかなる手法でも、そのような実装は、完全には行うことができません。\nブラウザのポリシーとして、極力ユーザーの意図していない挙動はさせない、ということがあるからです。\n\nそもそもなぜ、\n> ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい\nとしたいのでしょうか。\nその理由によって、実装方法の工夫で、実現できる可能性があります。\n\nまた、ブラウザバックは、特にAndroid機種は、ブラウザ以前に、端末自体にバックボタンがありますので、\nブラウザ上防げたとしても、そちらは防ぎようがありません。\n\nなので、a.comさんの提示されている方法か、\nやはり大事なのが、\n**ブラウザバックボタンと、Webアプリ上の戻るボタンでの挙動を統一できるよう実装する**ことではないでしょうか。\n\n多くのエンジニアが悩む部分ではありますが、\nその多くのエンジニアは、上記に帰着します。\n(ブラウザの、Webのポリシーとセキュリティ概念によっての、ブラウザの仕様がある限り)","dateModified":"2023-04-13T05:18:11.439Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-ot604o4m5iw8z1","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":2}},{"@type":"Comment","author":{"@type":"Person","name":"yambejp","url":"https://teratail.com/users/yambejp"},"datePublished":"2023-04-13T05:17:46.929Z","text":"chrome系は画面を一度クリックするなどユーザーに作業をさせないと戻れてしまいます\nこれは悪質なサイトへの対応のようですのでchromeの考え方が変わらない限り\n戻れるのは仕方ないことでしょう。\nたとえばなんらかの方法でユーザーにクリックさせる仕組みをつければ可能といえば可能でしょうね","dateModified":"2023-04-13T05:17:46.929Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-63fljk95yawvk2","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":4}},{"@type":"Comment","author":{"@type":"Person","name":"a.com","url":"https://teratail.com/users/a.com"},"datePublished":"2023-04-13T04:32:59.625Z","text":"ブラウザバックできないブラウザを使うしか無いと思います","dateModified":"2023-04-13T04:32:59.625Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-1andauq7dj8mgc","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}},{"@type":"Comment","author":{"@type":"Person","name":"rtewd","url":"https://teratail.com/users/rtewd"},"datePublished":"2023-04-13T03:57:31.704Z","text":"#2\nTwitterのようなSPA仕様でも戻るボタンで前のページに戻れるような気がするのは気のせいでしょうか?\n\n>1ページしかないのでブラウザによる進む・戻るという概念をなくしてしまうという発想です。\n\nSPAだからといってその無くす概念が正しいともいえない、寧ろ、あったほうがいいように思うのですが、、、\nご意見いただけないでしょうか","dateModified":"2023-04-13T03:59:30.717Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-gdfilk1nh1flc8","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":3}},{"@type":"Comment","author":{"@type":"Person","name":"eisaku123","url":"https://teratail.com/users/eisaku123"},"datePublished":"2023-04-13T02:40:37.931Z","text":"#2\nNKTIDKSGさんご教授ありがとうございます。\n経験上そのような意見は確かにそうです。\n\nしかし、開発が半分以上、進んでしまい、手戻りするには容易ではない状況になりつつあります。\n\n「全環境でネイティブ機能を抑える事はできないからです。」\nとおっしゃられてますが、chromeとsafalyは抑えることはできるのでしょうか?\n\n\n","dateModified":"2023-04-13T02:40:37.931Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-fm4v83glzd6yjv","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@type":"Comment","author":{"@type":"Person","name":"eisaku123","url":"https://teratail.com/users/eisaku123"},"datePublished":"2023-04-13T02:33:23.474Z","text":"#1\nGPT-4manさんご教授ありがとうございます。\nしかし、提供していただいたコードをコピペして、ブラウザーの戻るを押すと戻ってしまいます。(泣く)\n\nまた、私の既存のところにコピペしても戻ってしまいます。\nただし、少し変わった現象があり、タブが5つ並んでして、選択して、戻るを押すと戻りません。\n\nGPT-4manさんの方では試されましたでしょうか?","dateModified":"2023-04-13T02:45:07.879Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-mpgnw3svf36quo","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":2}},{"@type":"Comment","author":{"@type":"Person","name":"pippi19","url":"https://teratail.com/users/pippi19"},"datePublished":"2023-04-13T02:06:11.429Z","text":"JSのhistory制御では完全に制限する事はできないと思います。\n全環境でネイティブ機能を抑える事はできないからです。\n\n個人的には、そもそも1ページにしてしまうことで実現できると思います。\n1ページしかないのでブラウザによる進む・戻るという概念をなくしてしまうという発想です。\n\n各ページで固有にURLを持たせる必要がなければ、\nフロントをSPAに近い実装にすることでいけると思います。\n\n1画面内でユーザーアクションによって画面内の要素を書き換える(hostory操作は走らせない)\nPHPの処理が必要な部分はAPI化して非同期で。","dateModified":"2023-04-13T02:06:11.429Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-4ichps6d6duqh2","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":8}},{"@type":"Comment","author":{"@type":"Person","name":"quiz","url":"https://teratail.com/users/quiz"},"datePublished":"2023-04-13T01:52:53.553Z","text":"「ChatGPT(GPT-4)]により生成された文章です」\n\nブラウザの戻るボタンを無効化することは一般的には推奨されませんが、あくまでどうしても実装したい場合には、JavaScriptを使用してブラウザの履歴を操作する方法があります。\n\n以下に、ブラウザの戻るボタンの動作を無効化するJavaScriptのコード例を示します。\n\n```html\n\n\n
\n \n \n Disable Browser Back Button \n \n\n\n Disable Browser Back Button \n Go to example.com \n\n\n```\n\nこのコードでは、window.history.pushStateを使って現在のURLを履歴に追加し、window.onpopstateイベントを使用してブラウザの戻るボタンが押されたときに再び現在のURLを履歴に追加しています。これにより、戻るボタンが押されても、常に現在のページに留まるようになります。\n\nただし、ブラウザの戻るボタンの無効化はユーザビリティを損なう可能性があるため、通常は避けるべきです。代わりに、アプリケーションのロジックやナビゲーションを改善することで、ブラウザバック問題を解決することが推奨されます。","dateModified":"2023-04-13T01:52:53.553Z","url":"https://teratail.com/questions/691hs6js28v67o#reply-uu02v07mkslo4j","agentInteractionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}}],"url":"https://teratail.com/questions/691hs6js28v67o"}
実現したいこと
ある案件で初めてphpでwebアプリを開発をしてます。
chromeなどで左上にある戻るボタンを押すとブラウザーバック問題が起きて困ったことはありませんか?
実現したいことは「ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい」
です。
単純に<head>タグの辺でおまじないを記述したり、javascriptで記述する方法があるのでしょうか?
ご教授、よろしくお願いします。
「ChatGPT(GPT-4)]により生成された文章です」
ブラウザの戻るボタンを無効化することは一般的には推奨されませんが、あくまでどうしても実装したい場合には、JavaScriptを使用してブラウザの履歴を操作する方法があります。
以下に、ブラウザの戻るボタンの動作を無効化するJavaScriptのコード例を示します。
html
1 <! DOCTYPE html >
2 < html lang = " en " >
3 < head >
4 < meta charset = " UTF-8 " >
5 < meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
6 < title > Disable Browser Back Button </ title >
7 < script >
8 window . history . pushState ( null , "" , window . location . href ) ;
9 window . onpopstate = function ( ) {
10 window . history . pushState ( null , "" , window . location . href ) ;
11 } ;
12 </ script >
13 </ head >
14 < body >
15 < h1 > Disable Browser Back Button </ h1 >
16 < a href = " https://www.example.com " > Go to example.com </ a >
17 </ body >
18 </ html >
このコードでは、window.history.pushStateを使って現在のURLを履歴に追加し、window.onpopstateイベントを使用してブラウザの戻るボタンが押されたときに再び現在のURLを履歴に追加しています。これにより、戻るボタンが押されても、常に現在のページに留まるようになります。
ただし、ブラウザの戻るボタンの無効化はユーザビリティを損なう可能性があるため、通常は避けるべきです。代わりに、アプリケーションのロジックやナビゲーションを改善することで、ブラウザバック問題を解決することが推奨されます。
JSのhistory制御では完全に制限する事はできないと思います。
全環境でネイティブ機能を抑える事はできないからです。
個人的には、そもそも1ページにしてしまうことで実現できると思います。
1ページしかないのでブラウザによる進む・戻るという概念をなくしてしまうという発想です。
各ページで固有にURLを持たせる必要がなければ、
フロントをSPAに近い実装にすることでいけると思います。
1画面内でユーザーアクションによって画面内の要素を書き換える(hostory操作は走らせない)
PHPの処理が必要な部分はAPI化して非同期で。
#1
GPT-4manさんご教授ありがとうございます。
しかし、提供していただいたコードをコピペして、ブラウザーの戻るを押すと戻ってしまいます。(泣く)
また、私の既存のところにコピペしても戻ってしまいます。
ただし、少し変わった現象があり、タブが5つ並んでして、選択して、戻るを押すと戻りません。
GPT-4manさんの方では試されましたでしょうか?
#2
NKTIDKSGさんご教授ありがとうございます。
経験上そのような意見は確かにそうです。
しかし、開発が半分以上、進んでしまい、手戻りするには容易ではない状況になりつつあります。
「全環境でネイティブ機能を抑える事はできないからです。」
とおっしゃられてますが、chromeとsafalyは抑えることはできるのでしょうか?
#2
TwitterのようなSPA仕様でも戻るボタンで前のページに戻れるような気がするのは気のせいでしょうか?
>1ページしかないのでブラウザによる進む・戻るという概念をなくしてしまうという発想です。
SPAだからといってその無くす概念が正しいともいえない、寧ろ、あったほうがいいように思うのですが、、、
ご意見いただけないでしょうか
ブラウザバックできないブラウザを使うしか無いと思います
chrome系は画面を一度クリックするなどユーザーに作業をさせないと戻れてしまいます
これは悪質なサイトへの対応のようですのでchromeの考え方が変わらない限り
戻れるのは仕方ないことでしょう。
たとえばなんらかの方法でユーザーにクリックさせる仕組みをつければ可能といえば可能でしょうね
現状、いかなる手法でも、そのような実装は、完全には行うことができません。
ブラウザのポリシーとして、極力ユーザーの意図していない挙動はさせない、ということがあるからです。
そもそもなぜ、
ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい
としたいのでしょうか。
その理由によって、実装方法の工夫で、実現できる可能性があります。
また、ブラウザバックは、特にAndroid機種は、ブラウザ以前に、端末自体にバックボタンがありますので、
ブラウザ上防げたとしても、そちらは防ぎようがありません。
なので、a.comさんの提示されている方法か、
やはり大事なのが、
ブラウザバックボタンと、Webアプリ上の戻るボタンでの挙動を統一できるよう実装する ことではないでしょうか。
多くのエンジニアが悩む部分ではありますが、
その多くのエンジニアは、上記に帰着します。
(ブラウザの、Webのポリシーとセキュリティ概念によっての、ブラウザの仕様がある限り)
#5
TwitterのようなSPA仕様でも戻るボタンで前のページに戻れるような気がするのは気のせいでしょうか?
気のせいではありません。
TwitterはSPAですので、意図的に戻れるようにしています。
私が提案したのはSPAに近い実装 です。
あくまで1ページ内での要素の書き換え、物理遷移も仮想繊維もさせない実装という提案です。
SPAだからといってその無くす概念が正しいともいえない、寧ろ、あったほうがいいように思うのですが、、、
はい、一般論で言えばUX観点ではその通りだと思います。
ただし今回は質問者による下記の要件がありますので。
実現したいことは「ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい」
皆様、ありがたい、アドバイスありがとうございます。
まず、yambejpさんのご提案(自動でボタンを押させる)で以下のコードを書きました。
結果は戻ってしまいました。泣く
そこでボタンが効いているかどうか、手動で押すと、戻らなくなります。
他の記述方法はあればご教示お願いします。
window.onload = function() {
document.getElementById("abc").click();
console.log("ボタンが押されましたよ");
};
window.addEventListener('load', function() {
// 履歴を変更する
window.history.pushState(null, "", window.location.href);
// ブラウザーの「戻る」ボタンを無効にする
window.onpopstate = function() {
window.history.pushState(null, "", window.location.href);
};
});
#10
一応私の案に少し興味がありそうですので、具体的にはこんなかんじ
javascript
1 < script >
2 window . addEventListener ( 'popstate' , ( ) => {
3 history . pushState ( null , null , null ) ;
4 } ) ;
5 window . addEventListener ( 'DOMContentLoaded' , ( ) => {
6 const dlg = document . querySelector ( 'dialog' ) ;
7 history . pushState ( null , null , null ) ;
8 btn . addEventListener ( 'click' , ( ) => {
9 history . go ( - 2 ) ;
10 } ) ;
11 dlg . addEventListener ( 'close' , ( ) => {
12 if ( dlg . returnValue != "ok" ) {
13 dlg . showModal ( ) ;
14 }
15 } ) ;
16 dlg . showModal ( ) ;
17 } ) ;
18 < / script >
19 < dialog >
20 < form method = "dialog" >
21 OK ボタンを推してください
22 < button type = "submit" value = "ok" > OK < / button >
23 < / form >
24 < / dialog >
25 < input type = "button" id = "btn" value = "btn" >
26
#10
「全環境でネイティブ機能を抑える事はできないからです。」
とおっしゃられてますが、chromeとsafalyは抑えることはできるのでしょうか?
Win/Mac/iOS/Androidの純粋な最新版Chrone、
Mac/iPhoneのSafariのみに限定(派生系やWebViewなどを含まない)すればやり方はあるかもしれません。
個人的には厳しいように思いますが、他の方の回答を参考にしてください。
しかし、開発が半分以上、進んでしまい、手戻りするには容易ではない状況になりつつあります。
であれば荒技ですが、
いっそのこと1枚のページ内にiframeでそのWebアプリを埋め込んでしまえば理論上戻れなくなりますね。
右クリックできなくすればより戻りにくくなると思います。
#11
yambejpさんご提示ありがとうございます。
ご提示いただいた「画面でOKボタンを押してください」のOKボタンを人が押すと戻るボタンが起動しない制御になる仕組みでよろしいでしょうか。
この方法は良いアイデアで私も案は浮かんでました。
人を介さない方法はあるのでしょうか?
#13
OKボタンを人が押すと戻るボタンが起動しない制御になる仕組み
そういう想定で例示しましたが、そうなっていませんか?
別にOKで閉じることが目的ではなく、画面上の何かをクリックしたら
pushStateした挙動が有効になるということです。
人を介さない方法はあるのでしょうか?
強制的にdialogのbuttonをclickしても、触ったことにはならないのでだめですね
そもそも「人を介すことが必須」だからこういうUXになっているわけですから
あくまでも姑息な手段ということなので。
たとえばdialogでなくても、なにかアイコン的なものをだして、
「クリックしたらスタートします」のような仕組みにすれば挙動は同じでしょう
#13
yambejpさん、結論を述べていただきありがとうございます。
もう少しあがいてみてます。
#15
たとえばユーザーにdialogを意識させないUI
javascript
1 < style >
2 dialog [ open ] {
3 width : 100 % ;
4 height : 100 % ;
5 border : 0 ;
6 display : flex ;
7 justify - content : center ;
8 align - items : center ;
9 }
10 dialog [ type = submit ] {
11 display : none ;
12 }
13 < / style >
14 < script >
15 window . addEventListener ( 'popstate' , ( e ) => {
16 history . pushState ( null , null , null ) ;
17 } ) ;
18 window . addEventListener ( 'DOMContentLoaded' , ( ) => {
19 const dlg = document . querySelector ( 'dialog' ) ;
20 history . pushState ( null , null , null ) ;
21 btn . addEventListener ( 'click' , ( ) => {
22 history . go ( - 2 ) ;
23 } ) ;
24 dlg . addEventListener ( 'click' , ( ) => {
25 dlg . querySelector ( '[type=submit]' ) . click ( ) ;
26 } )
27 dlg . addEventListener ( 'close' , ( ) => {
28 if ( dlg . returnValue != "ok" ) {
29 console . log ( dlg . returnValue )
30 dlg . showModal ( ) ;
31 }
32 } ) ;
33 dlg . showModal ( ) ;
34 } ) ;
35 < / script >
36 < dialog >
37 < form method = "dialog" >
38 push start
39 < button type = "submit" value = "ok" > OK < / button >
40 < / form >
41 < / dialog >
42 < input type = "button" id = "btn" value = "btn" >
#12
NKTIDKSGさん色々とアドバイスありたとうございます。
荒技 ifameという方法は思い浮かびませんでした。
右クリックできなくすればより戻りにくくなると思います。
何か方法はあるのでしょうか。
#17
下記で行けるような気がしましたが、
一度iframeにフォーカスしてしまうと、ブラウザバック時の挙動が親ではなく子のiframeに映ってしまうようでした。ダメですね。(Chromeで確認)
html
1 < iframe src = " https://teratail.com/questions/691hs6js28v67o " frameborder = " 0 " style = " width : 100 vw ; height : 100 vh " > </ iframe >
#18
NKTIDKSGさんご確認ありがとうございます。
私も確認しました。残念、戻ってしまいますね。泣く
また何か良いアイデアがあればよろしくお願いします。
#8
miyabi_takatsuk回答ありがとうございます。
そもそもなぜ、
ブラウザーの左上にある戻るボタンを押しても反応しなく、webアプリ上の戻るで遷移をさせたい
としたいのでしょうか。
注文サイト作ってまして、POSTで遷移して戻るとダイアログが表示されるからそれを出さないようにしたいからです。
ブラウザバックボタンと、Webアプリ上の戻るボタンでの挙動を統一できるよう実装する
恐れ入りますが、今までの経験で具体的にどういう違いがあって挙動を統一されたことがあるのでしょうか?
ご教示お願いします。
#16
yambejpさん、さらにご提案ありがとうございます。全体を透明のボタンもありですね。
あと、理想なのが、最初のindex.htmlでボタンを押したら次のページ以降ずっと戻るボタンを押せないような方法って考えられますでしょうか?
注文サイト作ってまして、POSTで遷移して戻るとダイアログが表示されるからそれを出さないようにしたいからです。
formタグを使っている状況だと思います。
昔は多かったですが、最近そのような問題もあり、
JavaScriptからajaxやfetchでPOSTするのが一般的だと思います。
ブラウザバック問題を防げるだけでなく、エラーハンドリングもしやすいです。
PHPのレスポンスをjsonに変えるだけですので、そこまで改修も大きくないかと。
POSTした結果をそのまま表示するのではなく、リダイレクトを挟んでGETで次の画面を表示させることで、リロードやブラウザバックの際にPOSTの結果を使う箇所を回避する、「PRGパターン」と呼ばれるような手法もあります。
最新の回答から1ヶ月経過したため
この意見交換はクローズされました
意見をやりとりしたい話題がある場合は質問してみましょう!
質問する
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。