Opera の右クリックイベント検出
var d = document.getElementById('hoge'); d.oncontextmenu = function(e) { if(window.event) event.returnValue = false; // for IE else e.preventDefault(); // なんらかの処理 }
のようなコードで右クリックでコンテキストメニューを表示させないで処理を実行できる。
しかし Opera の場合、同じような動作を実現することはできない。
まずデフォルトの状態だと右クリックを JavaScript で検出することさえできない。
検出できるようにするには、
Preferences -> Advanced -> Content -> JavaScript Options -> Allow script to recive right clicks*1
のチェックをつける。
さらに Opera には oncontextmenu というイベントハンドラがないので
d.addEventListener('mousedown', function(e) { if(e.button == 2) { // なんらかの処理 } }, false);
のように mousedown イベントをみる必要がある。まだ問題がある。コンテキストメニューを表示させないで処理を実行することができない。 preventDefault() でも駄目。
解決策ではないんだけど alert() を処理に含めればコンテキストメニューを表示させないで実行できる。もちろんアラートダイアログはでるけどね。
最後の手段として Opera 自体のコンテキストメニューを無効にしてしまう方法がある。
opera:config#UserPrefs|AllowContextMenus
のチェックをはずせば OK。ただし、いかなる場所でコンテキストメニューが表示されないので不便すぎる。
*1:日本語に読み替えてね