Ответ 1
Захватите событие onContextMenu
и верните false в обработчик событий.
Вы также можете зафиксировать событие клика и проверить, какая кнопка мыши запускала событие с помощью event.button
, в некоторых браузерах.
Не то, чтобы я пытался предотвратить "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>
Захватите событие onContextMenu
и верните false в обработчик событий.
Вы также можете зафиксировать событие клика и проверить, какая кнопка мыши запускала событие с помощью event.button
, в некоторых браузерах.
Если вам не нужно уведомлять пользователя с сообщением каждый раз, когда они пытаются щелкнуть правой кнопкой мыши, попробуйте добавить это в свой тег тела
<body oncontextmenu="return false;">
Это заблокирует доступ к контекстному меню (не только правой кнопкой мыши, но и с клавиатуры)
Тем не менее, на самом деле нет смысла добавлять дескриптор правого клика. Любой, обладающий базовыми знаниями браузера, может просматривать исходный код и извлекать необходимую информацию.
Я использовал это:
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, я знаю, что пользователь либо выпустил правую кнопку мыши, либо нажал/отпустил клавишу контекстного меню.
Надеюсь, что это поможет.
Темная сторона заметки. Я никогда не видел щелчок правой кнопкой мыши script, который будет работать в Opera, даже если Opera настроена так, чтобы разрешить перехват правой кнопкой мыши (по умолчанию это отключено).
Если ваша страница действительно полагается на то, что люди не смогут увидеть это меню, вы должны знать, что современные браузеры (например, Firefox) позволяют пользователю решить, действительно ли он хочет его отключить или нет. Таким образом, у вас нет никакой гарантии, что меню будет действительно отключено.
Вы не можете полагаться на контекстные меню, так как пользователь может деактивировать его. Большинство веб-сайтов хотят использовать эту функцию, чтобы раздражать посетителя.