web-dev-qa-db-ja.com

JavaScriptで右クリックコンテキストメニューを無効にする方法

「ソースの表示」などの愚かなことを防止しようとしているわけではありませんが、特定の要素のカスタムコンテキストメニューを作成しています。

編集:回答への応答:私はこれを試してみました:

<a id="moo" href=''> </a>

<script type="text/javascript">
    var moo = document.getElementById('moo');

    function handler(event) {
        event = event || window.event;

        if (event.stopPropagation)
            event.stopPropagation();

        event.cancelBubble = true;
        return false;
    }

    moo.innerHTML = 'right-click here';

    moo.onclick = handler;
    moo.onmousedown = handler;
    moo.onmouseup = handler;
</script>
116
Jimmy

onContextMenuイベントをキャプチャし、イベントハンドラーでfalseを返します。

とにかく、一部のブラウザでは、クリックイベントをキャプチャし、event.buttonを使用してイベントを発生させたマウスボタンを確認することもできます。

87
Triptych

ユーザーが右クリックしようとするたびにユーザーにメッセージを通知する必要がない場合は、これをbodyタグに追加してみてください

<body oncontextmenu="return false;">

これにより、コンテキストメニューへのすべてのアクセスがブロックされます(マウスの右ボタンからだけでなく、キーボードからも)

ただし、右クリック無効化機能を追加しても意味はありません。ブラウザの基本的な知識がある人は誰でもソースを表示し、必要な情報を抽出できます。

108
by0

私はこれを使用しました:

document.onkeydown = keyboardDown;
document.onkeyup = keyboardUp;
document.oncontextmenu = function(e){
 var evt = new Object({keyCode:93});
 stopEvent(e);
 keyboardUp(evt);
}
function stopEvent(event){
 if(event.preventDefault != undefined)
  event.preventDefault();
 if(event.stopPropagation != undefined)
  event.stopPropagation();
}
function keyboardDown(e){
 ...
}
function keyboardUp(e){
 ...
}

次に、これら2つの最後の関数でe.keyCodeプロパティをキャッチします。e.keyCode== 93の場合、ユーザーが右マウスボタンを放したか、コンテキストメニューキーを押した/離したことがわかります。

それが役に立てば幸い。

14
ElDoRado1239

ページが本当にそのメニューを見ることができないという事実にページが依存している場合、最新のブラウザ(Firefoxなど)でユーザーが本当にそれを無効にするかどうかを決定できることを知っておく必要があります。したがって、メニューが実際に無効になるという保証はまったくありません。

3
Marc

ユーザーがコンテキストメニューを無効にできるため、コンテキストメニューに頼ることはできません。ほとんどのWebサイトは、この機能を使用して訪問者を困らせます。

1
stesch