IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Désactiver le menu contextuel du navigateur


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 408
    Par défaut Désactiver le menu contextuel du navigateur
    Bonjour,

    Dans une appli web, je souhaite désactiver le menu contextuel (clic droit) du navigateur depuis une page XHTML.
    Existe-t-il une solution en JS ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Bonjour,
    je vais te donner une façon de faire ce que tu veux faire, mais après je vais t’expliquer pourquoi je pense que c’est une mauvaise idée.

    Si tu veux empêcher le contextmenu sur le document entier, il faut annuler le comportement par défaut de l’évènement correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.addEventListener("contextmenu", function (event) {
      event.preventDefault();
    });
    Si tu veux juste annuler le menu sur un élément particulier, il te faut d’abord une référence sur l’élément, par exemple avec getElementById ou querySelector, puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var monElement = ... ;
     
    monElement.addEventListener("contextmenu", function (event) {
      event.preventDefault();
    });
    Je pense que c’est une mauvaise idée, parce que tu ne devrais pas chercher à empêcher l’utilisatrice ou l’utilisateur de faire quelque chose que son navigateur lui permet de faire en temps normal.

    Les navigateurs te permettent d’annuler le menu contextuel non pas pour le simple plaisir de l’annuler, mais pour le remplacer par quelque chose de plus utile, spécifiquement à l’application. Par exemple, le menu contextuel de Youtube te permet de copier l’adresse d’une vidéo, de voir des statistiques, etc.




    Personnellement, j’ai ajouté une extension (que j’ai codée moi-même) à mon navigateur, et qui empêche les sites de faire ce que tu fais, sur la base sur d’une liste blanche. Quand un site que je visite n’est pas dans ma liste blanche, mon extension exécute ce script avant tout autre script de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let _addEventListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function addEventListener(eventType, ...args) {
      if ("contextmenu" !== eventType) {
        _addEventListener.call(this, eventType, ...args);
      }
    };
    Ce que fait ce bout de code, en gros, c’est détourner la méthode addEventListener pour la remplacer par une autre, qui fait presque exactement la même chose sauf dans le cas où l’évènement est contextmenu, auquel cas elle ne fait rien. Par conséquent, les écouteurs d’évènements contextmenu ne sont jamais ajoutés, et donc le menu contextuel ne peut pas être annulé.

    Si je te montre ça c’est pour que tu aies bien conscience que chacun est maître de ce qui se passe sur sa machine, et que toi, en tant que développeur, tu ne peux pas avoir le contrôle absolu de ce qui se passe côté client. Si ton but est de protéger des créations artistiques, la meilleure solution est de ne publier que des versions en qualité limitée.

    Note : en France, les créations sont automatiquement protégées par le droit d’auteur. À moins que tu mettes une licence qui l’autorise explicitement, personne n’a le droit d’utiliser ton travail.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 408
    Par défaut
    Bonjour,
    Merci beaucoup pour toutes ces explications et solutions.
    En fait je souhaite simplement remplacer le menu contextuel du navigateur par un menu applicatif.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2009, 23h43
  2. Réponses: 0
    Dernier message: 11/12/2007, 17h50
  3. Désactiver le menu contextuel dans un classeur.
    Par Karimbon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/11/2007, 14h00
  4. Désactiver le menu contextuel d'un Tedit !
    Par banban54 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 27/01/2006, 13h25
  5. Réponses: 2
    Dernier message: 23/01/2006, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo