121 votes

Comment désactiver le menu contextuel du clic droit en JavaScript ?

Non pas que j'essaie d'empêcher l'affichage de la source ou quoi que ce soit d'autre, mais je suis en train de créer des menus contextuels personnalisés pour certains éléments.

EDIT : réponse aux réponses : J'ai essayé :

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

111voto

by0 Points 1903

Si vous ne tenez pas à alerter l'utilisateur par un message chaque fois qu'il essaie de faire un clic droit, essayez d'ajouter ceci à votre balise body

<body oncontextmenu="return false;">

Cela bloquera tout accès au menu contextuel (non seulement à partir du bouton droit de la souris, mais aussi à partir du clavier).

Cependant, il est vraiment inutile d'ajouter un désactivateur de clic droit. Toute personne ayant des connaissances de base en matière de navigation peut visualiser la source et en extraire les informations dont elle a besoin.

95voto

Triptych Points 70247

Capturez le onContextMenu et renvoie false dans le gestionnaire de l'événement.

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

14voto

Je l'ai utilisé :

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, je récupère la propriété e.keyCode dans ces deux dernières fonctions - si e.keyCode == 93, je sais que l'utilisateur a soit relâché le bouton droit de la souris, soit appuyé/relâché la touche du menu contextuel.

J'espère que cela vous aidera.

4voto

Vilx- Points 37939

Remarque : je n'ai jamais vu de script qui fonctionne sur Opera, même si Opera est configuré pour autoriser l'interception du clic droit (ce qui est désactivé par défaut).

3voto

Marc Points 892

Si votre page repose vraiment sur le fait que les gens ne pourront pas voir ce menu, vous devez savoir que les navigateurs modernes (par exemple Firefox) laissent l'utilisateur décider s'il veut vraiment le désactiver ou non. Vous n'avez donc aucune garantie que le menu sera réellement désactivé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X