Rechte Maustaste sperren

Das folgende Script sperrt die rechte Maustaste in Netscape 4 und Mozilla, in Internet Explorer ab Version 4, in Opera ab Version 7.21 und in Konqueror spätestens ab Version 3.3.2. In Mozilla, Opera und Konqueror ist es möglich, das Abfangen von Rechtsklick durch JavaScript zu unterbinden. In diesen Fällen funktioniert das Script nicht.

<script type="text/javascript">
function click (e) {
  if (!e)
    e = window.event;
  if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3)) {
    if (window.opera)
      window.alert("Sorry: Diese Funktion ist deaktiviert.");
    return false;
  }
}
if (document.layers)
  document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = click;
document.oncontextmenu = click;
</script>

Im Internet Explorer ab Version 5 sowie in Mozilla tritt vor dem Aufklappen des Kontextmenüs das Ereignis contextmenu ein. Dieses ist ursprünglich dazu gedacht, das Browser-Kontextmenü in geschlossenen Webanwendungen durch ein eigenes Kontextmenü zu ersetzen. Es ist aber auch möglich, darüber schlichtweg das Aufklappen des Browser-Kontextmenüs zu verhindern, ohne stattdessen ein eigenes Kontextmenü auf Basis von HTML und CSS erscheinen zu lassen - vorausgesetzt, die Browsereinstellungen lassen dies zu.

Über document.oncontextmenu = click; wird die Funktion click() als Seite Event-Handler für das contextmenu-Ereignis beim Objekt Seite document angegeben. Dadurch wird die Funktion immer dann ausgeführt, wenn der Benutzer irgendwo im Dokument das Kontextmenü aktivieren will, z.B. durch einen Rechtsklick.

In IE 4, Netscape 4, Opera und Konqueror wird bei einem Rechtsklick lediglich ein reguläres Seite mousedown-Ereignis erzeugt, genauso wie bei einem Linksklick. Über document.onmousedown = click; wird ebenfalls die Funktion click() als Event-Handler für alle Mausklicks im Dokument registriert.

Damit im Netscape 4 die Behandlung des mousedown-Ereignisses möglich ist, muss zusätzlich Seite document.captureEvents mit dem Parameter Event.MOUSEDOWN ausgeführt werden. Mit if (document.layers) wird vorher abgefragt, ob es sich um einen Netscape-4-Browser handelt.

Die Funktion click() wird folglich in zwei Fällen ausgeführt: Bei einem contextmenu-Ereignis oder einem mousedown-Ereignis. Im ersten Fall kann das Ereignis sofort abgefangen werden. Im zweiten Fall muss erst geprüft werden, ob es sich um einen Klick mit der rechten Maustaste handelt. Die nötigen Informationen - den Typ des Ereignisses sowie die gedrückte Maustaste - erhält die Funktion über das Seite Event-Objekt. Doch bereits der Zugriff darauf gestaltet sich schwierig. Im Internet Explorer ist das Event-Objekt unter window.event abrufbar. In allen anderen Browsern wird es der Event-Handler-Funktion als Parameter übergeben. Die Funktion click() nimmt daher einen Parameter mit dem Namen e entgegen. Eine if-Anweisung prüft direkt beim Start der Funktion, ob das Event-Objekt auf diese Weise übergeben wurde und somit das Objekt e existiert (siehe Seite Abfragen ob ein Objekt existiert). Wenn dies nicht der Fall ist, wird das Event-Objekt aus window.event in die Variable e kopiert. Durch diese Zuweisung ist das Event-Objekt auf jeden Fall als e ansprechbar.

Im Folgenden prüft die Funktion, ob eine der drei folgenden Bedingungen erfüllt ist: Erstens wird abgefragt, ob der Typ des Ereignisses Seite type gleich contextmenu ist. Zweitens und Drittens wird abgefragt, ob die rechte Maustaste gedrückt wurde. Im Internet Explorer, Opera, Mozilla und Konqueror lässt sich mithilfe der Eigenschaft Seite button des Event-Objekts in Erfahrung bringen, welche Maustaste gedrückt wurde. Die Zahl 2 steht einhellig für die rechte Maustaste. Im Netscape 4 hingegen heißt die Eigenschaft Seite which. In dem Fall steht die Zahl 3 für die rechte Maustaste. Bei allen drei Abfragen wird vorher geprüft, ob die jeweilige verwendete Event-Eigenschaft existiert, sodass das Script mit den zur Verfügung stehenden Objekten arbeitet.

Wenn also eine dieser Bedingungen zutrifft, muss das Ereignis abgefangen werden, um das Erscheinen des Kontextmenüs zu unterbinden. Dies wird mit dem Seite Rückgabewert false bewerkstelligt. Vorher jedoch muss unter gewissen Umständen ein Seite Dialogfenster angezeigt werden, und zwar nur dann, wenn das Script vom Opera-Browser ausgeführt wird. Dies wird über if (window.opera) abgefragt. Genau genommen ist das Dialogfenster für Opera 8 nötig. In früheren Opera-Versionen führt bereits document.onmousedown = click; dazu, dass alle Kontextmenüs deaktiviert werden - ohne dass die Funktion click() bei einem Rechtsklick überhaupt ausgeführt wird. In Version 8 ist dieser Fehler behoben. Zudem reicht ein einfaches return false; nicht mehr aus, um das Aufklappen des Kontextmenüs zu verhindern. Es muss zusätzlich ein Dialogfenster angezeigt werden. Das Dialogfenster kann nicht einfach in allen Browsern angezeigt werden, denn z.B. Mozilla erzeugt bei einem Rechtsklick sowohl ein mousedown- als auch ein contextmenu-Ereignis. Daher würden bei einem Rechtsklick zwei Dialogfenster angezeigt.

Seite zurück