18

ユーザーが Web アプリに戻らないようにしようとしています。このために、 をキャッチして、戻るボタンの効果をキャンセルするようにwindow.onpopstate追加しました。e.preventDefault

しかし、それは起こらないようです。

window.addEventListener('popstate',function(e){ 
console.log(e); e.preventDefault();  
});

popstateブラウザのイベントを防ぐことはできませんか?それとも私は何か間違ったことをしていますか?

4

2 に答える 2

32

このドキュメントによると、popstate イベントはキャンセルできません。

仕様: HTML5
インターフェイス: PopStateEvent
バブル: はいキャンセル可能
: いいえ
ターゲット: defaultView
デフォルトのアクション: なし

于 2015-09-07T06:29:27.830 に答える
7

まず、「不可能」は決して受け入れられる答えではありません。

次に、popstate のバグを補うことができます。たとえば、私のリッチ エディターは怠け者のキーである Backspace を常に補正する必要があります。これは戻るボタンの有効なキーではありません (「ページダウン」のスペースバーのように) が、人々はブラウザー拡張機能を追加する代わりに世界に個人的な好みを課すので、人々がそれを押すと、エディターが何かを削除する代わりに popstate がトリガーされることがあります文字は、キーボード キャレットの左側にあります。

次のコード (私のプラットフォームのドキュメントの依存関係) は、popstate バグがトリガーされたときにそれを検出し、それを a で叩きe.preventDefault();、アドレス バーのアドレスを で修正しますhistory.go(1);。エディタを使用している人は、ブラウザが DOM を操作することを許可されていないため、何かが起こったことに気付きません。このコードは最小限であり (他の人がさまざまな状況でこのバグを補っている可能性があります)、現在 Gecko/Firefox でしかテストしていないので、Blink、Presto、Trident、および WebKit ベースのブラウザーも必ずテストしてください。

window.onpopstate = function(e)
{
 if (id_('editor') && is_node_parent(document.activeElement,id_('editor')))
 {
  e.preventDefault();
  history.go(1);
 }
}
于 2017-07-22T02:17:18.900 に答える