2013-05-16 7 views
5

JavaScriptを使用しているすべてのブラウザで元に戻したりやり直しを無効にしたいと思います。ブラウザで元に戻すとやり直しを無効にする

私は既に、キーボードの入力を介して元に戻しややり直しを無効にするためにキーを押すことができますが、メニュー項目も無効にしたいと考えています。 (標準メニューと右クリックメニュー)

これは可能ですか?いくつかのブラウザでのみ可能であっても、それは誰よりも良いでしょう。

+1

私が知っているだろう唯一の方法は、それがキーボード入力、カット/ペースト、または独自のスクリプトによって引き起こされていなかった場合、フィールドの変化を検出して確認することになり、その後、/それはアンドゥだったと仮定そうしたredo機能。私が知っている限り、元に戻す/やり直しイベントをキャッチするための実際のイベントハンドラはないので、(本当に必要な場合)これが唯一のオプションかもしれません。 –

答えて

2

あなたができることは、popstateイベントをインターセプトすることです。残念ながら、私はそれを取り消すことはできないと思うので、元に戻すためにダミーの状態を追加することで少しハックする必要があります。

次のコードは、ChromeとFFで後で押せなくなっています。他のブラウザでも気軽にテストしてください。

window.setTimeout(function(){ 
    window.history.pushState({}, '', '#'); 
    window.addEventListener("popstate", function() { 
    window.history.pushState({}, '', '#'); 
    }); 
},1000); 

自分の履歴に合わせてコードを変更してください。 独自の履歴実装の代わりにHTML5履歴APIを使用することも検討してください。

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

+0

私は、この質問が履歴の状態を変更することを求めているのではなく、contentEditable要素の取り消し/やり直しに関係していると思います。 – IliasT

0

それはブラウザAPIを使用できません。メソッドを検出または処理するにはいくつかの方法があります。 urlハッシングは、バックまたはフォワードイベントを処理するための1つの方法です。ただし、ブラウザはこれをユーザーの安全のためにサポートしていません。 javascript url hashingスクリプトを検索できますが、html5ブラウザと互換性のあるスクリプトについては忘れないでください。

3

私はこれが古いことを知っていますが、好奇心が強い人にとってはこれが私のために働いています。

$(window).bind('keydown', function(evt) { 
    if((evt.ctrlKey || evt.metaKey) && String.fromCharCode(evt.which).toLowerCase() == 'z') { 
    evt.preventDefault(); 
    } 
}); 
+1

これは本当に「メニュー項目を無効にしますか(標準メニューと右クリックメニュー)」ですか?つまり、マウスの右ボタンクリックコンテキストメニューの「元に戻す」オプションがブロックされていますか? – Zeek

+0

ええ、コンテキストメニューを無効にしたい場合もあります。しかし、ユーザーがアプリケーションメニューの「編集」 - >「元に戻す」オプションに移動したときに、イベントの伝播をどのように停止するかについてはまだ興味がありますか? – IliasT

関連する問題