2015-09-07 63 views
10

私のWebアプリケーションに戻ることをユーザーがやめようとしています。このために私はwindow.onpopstateを捕まえようとし、e.preventDefaultを追加して戻るボタンの効果を取り消しました。window.onPopStateのe.preventDefaultは可能ですか?

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

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

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

答えて

15

このdocumentationによると、popstateイベントは解約ではありません。

仕様:HTML5
インターフェース:PopStateEvent
バブル: はい
キャンセル可能:いいえ
対象:[既定
デフォルトの処置:なし

0

最初に "不可能"は、決して受け入れられる答えではありません。

次はです。はポップステートのバグを補うものです。例では、私の豊富なエディタは、怠惰なバスタードキー:Backspaceを常に補う必要があります。これはバックボタンのための有効なキーではありませんが(スペースを "ページダウン"と同じように)、ブラウザ拡張を追加するのではなく、人々が個人的な好みを世界に押し付けます。編集者の代わりにポップステートがトリガーされるキーボードのキャレットの左側にある文字を削除します。

ポストステートバグがトリガーされたときに次のコード(ここではポスト依存関係はありません)が検出され、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); 
} 
} 
+2

は最も確かに私はバックスペースについてはChromeでバグを提出し、データ損失のリスクが高い程度の強いケースを作ったの答え – Rob

+0

をすることができ、あなたは何を知っていますか?彼らは耳を傾け、Chromeから戻るボタンとしてバックスペースを利用しました。すべてのこれらの年の後、それが取ったすべては尋ねることでした。今、YouTubeだけがスペースバーを聞くなら... – Zectbumo

関連する問題