web-dev-qa-db-fra.com

Comment désactiver le menu contextuel en JavaScript avec le bouton droit de la souris

Non pas que j'essaie d'empêcher 'View Source' ou quelque chose d'aussi idiot, mais je crée des menus contextuels personnalisés pour certains éléments.

EDIT: réponse aux réponses: j'ai essayé ceci:

<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

Capturez l'événement onContextMenu et renvoyez false dans le gestionnaire d'événements.

Vous pouvez également capturer l'événement click et vérifier quel bouton de la souris a déclenché l'événement avec event.button, dans certains navigateurs en tout cas.

87
Triptych

Si vous ne souhaitez pas alerter l'utilisateur avec un message chaque fois qu'il essaie de cliquer avec le bouton droit de la souris, essayez de l'ajouter à votre balise body.

<body oncontextmenu="return false;">

Ceci bloquera tout accès au menu contextuel (pas seulement avec le bouton droit de la souris mais aussi avec le clavier)

Cependant, il est inutile d'ajouter un clic droit. Toute personne possédant des connaissances de base en navigation peut consulter la source et extraire les informations dont elle a besoin.

108
by0

J'ai utilisé ceci:

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

Ensuite, j'attrape la propriété e.keyCode dans ces deux dernières fonctions - si e.keyCode == 93, je sais que l'utilisateur a relâché le bouton droit de la souris ou a appuyé/relâché la touche du menu contextuel.

J'espère que ça aide.

14
ElDoRado1239

Si votre page repose vraiment sur le fait que les gens ne pourront pas voir ce menu, sachez que les navigateurs modernes (par exemple Firefox) permettent à l'utilisateur de décider s'il souhaite vraiment le désactiver ou non. Vous n’avez donc aucune garantie que le menu serait vraiment désactivé.

3
Marc

Vous ne pouvez pas compter sur les menus contextuels, car l'utilisateur peut le désactiver. La plupart des sites Web veulent utiliser cette fonctionnalité pour ennuyer le visiteur.

1
stesch