Как отключить контекстное меню контекстного меню в JavaScript

Не то, чтобы я пытался предотвратить "View Source" или что-то глупое, но я создаю некоторые настраиваемые контекстные меню для определенных элементов.

EDIT: ответ на ответы: я пробовал это:

<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>

Ответ 1

Захватите событие onContextMenu и верните false в обработчик событий.

Вы также можете зафиксировать событие клика и проверить, какая кнопка мыши запускала событие с помощью event.button, в некоторых браузерах.

Ответ 2

Если вам не нужно уведомлять пользователя с сообщением каждый раз, когда они пытаются щелкнуть правой кнопкой мыши, попробуйте добавить это в свой тег тела

<body oncontextmenu="return false;">

Это заблокирует доступ к контекстному меню (не только правой кнопкой мыши, но и с клавиатуры)

Тем не менее, на самом деле нет смысла добавлять дескриптор правого клика. Любой, обладающий базовыми знаниями браузера, может просматривать исходный код и извлекать необходимую информацию.

Ответ 3

Я использовал это:

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){
 ...
}

Затем я поймаю свойство e.keyCode в этих двух последних функциях - если e.keyCode == 93, я знаю, что пользователь либо выпустил правую кнопку мыши, либо нажал/отпустил клавишу контекстного меню.

Надеюсь, что это поможет.

Ответ 4

Темная сторона заметки. Я никогда не видел щелчок правой кнопкой мыши script, который будет работать в Opera, даже если Opera настроена так, чтобы разрешить перехват правой кнопкой мыши (по умолчанию это отключено).

Ответ 5

Если ваша страница действительно полагается на то, что люди не смогут увидеть это меню, вы должны знать, что современные браузеры (например, Firefox) позволяют пользователю решить, действительно ли он хочет его отключить или нет. Таким образом, у вас нет никакой гарантии, что меню будет действительно отключено.

Ответ 6

Вы не можете полагаться на контекстные меню, так как пользователь может деактивировать его. Большинство веб-сайтов хотят использовать эту функцию, чтобы раздражать посетителя.