Amarganth: Event 'mousedown': Kriege das Kontext-Menü des Browsers nicht weg...

Liebe Gemeinde

Kann mir hier vielleicht jemand helfen?

Ich habe das Problem, dass ich die rechte Maustaste verarbeiten möchte. Leider kommt da beim Klicken ein Kontextmenü von Safari. Ebenso bei Google Chrome und auch bei Microsoft Edge unter macOS.

Hier der Code, den ich aufs Minimum reduziert habe:

<html>
<head>
<script>
window.onload = function() {
  document.addEventListener("mousedown", function (e) {
    console.log("button: x,y: " + e.button+": " + e.clientX+"," + e.clientY);
    e.preventDefault();
    return false;
  });
}
</script>
</head>
<body>
</body>
</html>

Mit "preventDefault()" und mit dem "return false" versuche ich, dass ich die Eventverarbeitung nicht weitergebe. Funktioniert aber nicht. Ich kriege zwar die Maustasten sauber zurück, aber mit der rechten Maustaste kommt immer noch dieses Kontextmenü des Browsers, das ich dann immer wegklicken muss. Wie kann ich das abschalten? Was mache ich falsch?

Besten Dank zum Voraus für brauchbare Antworten.

  1. Hallo Amarganth,

    So geht's

    Vorteil: Das unterdrückt auch Kontextmenü-Aufrufe per Tastatur.

    Nachteil: Das unterdrückt auch Kontextmenü-Aufrufe per Tastatur.

    Du gibst dem User damit also nicht nur die Freiheit, die rechte Maustaste für andere Dinge zu verwenden, sondern nimmst ihm auch das Kontextmenü weg. Deshalb solltest Du Dir gut überlegen, in welchem Container Du das tust. Auf dem ganzen Dokument ist das mutmaßlich zu viel.

    Die Idee, dass Du den User damit erfolgreich am Klauen von Bildern hinderst, solltest Du dabei gleich vergessen. Da bieten die Browser-Entwicklerwerkzeuge genügend andere Möglichkeiten, und ein Kontextmenü ist auch per Tastatur verfügbar.

    Aber ich erinnere mich an lang vergangene Zeiten, wo ich den Rechtsklick durch Behandlung von click oder mousedown (bzw. mouseup, weil das Kontextmenü ja beim LOSLASSEN der Maus öffnet) erfolgreich abgefangen habe. Das muss zu Zeiten gewesen sein, wo Google noch kein Browserhersteller war, sondern die Back-End Suchmaschine von Yahoo und sogar CompuServe noch Relevanz besaß. Da gab es das contextmenu Event noch nicht.

    Ein bisschen wundert es mich, dass diese Technik nicht mehr funktioniert, eigentlich wird das Erhalten von Alttechnik im Web ziemlich hochgehalten. Und im MDN steht

    Any right-click event that is not disabled (by calling the event's preventDefault() method) will result in a contextmenu event being fired at the targeted element.

    Und obwohl defaultPrevented auf true ist, geht das Kontextmenü trotzdem auf. Ein wenig verwirrt bin ich schon.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hey Rolf

      Danke für die sehr rasche Antwort. Das ist genau die Lösung. Und es funktioniert wunderbar!

      Bilderklau ist hier kein Thema. ich muss das Maus-Kontextmenü in einem Canvas-Objekt eliminieren.

      Herzlichen Dank!

      (Auch) Rolf aka Amarganth

      1. Hallo Amarganth,

        gerade gefunden: der Firefox bietet für die ganz hartnäckig entschlossenen die Option dom.event.contextmenu.enabled in about:config an, womit man verhindern kann, dass das contextmenu Event gefeuert wird.

        Das verhindert das Verhindern des Kontextmenüs dann endgültig.

        Über die Jahre gab es genug Deppen, die auf diese Weise Inhalte schützen wollten, und ebensoviele Deppen, die Inhalte klauen - ach sorry - mit anderen teilen wollten.

        Und das Ende vom Lied ist, dass die Browser ein selbstgemachtes Kontextmenü radikal verhindern. Meh.

        Rolf

        --
        sumpsi - posui - obstruxi