Andreas Bierhals: Willkommen im Club zur rechten Maustaste!

Beitrag lesen

Hallo liebe HTML'ler!

Vor kurzem fragte ich im Chat, ob man wohl
HTML-Links statt auf die linke Maustaste auch auf
die rechte Maustaste irgendwie reagieren lassen könnte.
Die naheliegendste Frage ist dabei zunächst, wie man das
Kontextmenü wegbekommt, welches normalerweise
immer aufpoppt, wenn man den rechten Mausknopf drückt...

Nun, mit Hilfe der JS-Dokumentation aus http://developer.netscape.com/docs/manuals/javascript.html
kann man dieses Problem tatsächlich lösen.
Da einige offenbar glauben, man könne die rechte Maustaste im Web
nicht nutzen, poste ich hier einfach mal das Gegenbeispiel...

angenommen, irgendwo im Dokument steht ein Link wie z.B.

<a href="irgendwas">Test</a>

und dieser Link soll nun "doppeldeutig" gemacht werden (d.h. auf die
rechte Maustaste auch reagieren, und zwar anders...)
Zunächst definiere man irgendwo eine globale JavaScript-Variable, z.B.

var linktouched=0;

... und ändere den Link um in

<a href="irgendwas" onMouseover="linktouched=1" onMouseout="linktouched=0">Test</a>.

mit anderen Worten: Der link zeigt an, ob die Maus gerade über ihm steht oder nicht...

Danach muß man den Event-Handler zum 'MouseDown'-Event umbiegen.
Dies geschieht wie folgt:

<script language="JavaScript">
<!--
   window.captureEvents(Event.MOUSEDOWN);
  
   // neuen Event-Handler schreiben (Name beliebig)

function myMouseDownHandler(e) {
    
      // folgendes bedeutet: wenn linker Mausknopf gedrueckt wurde oder
      // die Maus nicht ueber dem Link ist, soll das passieren, was immer
      // bei gedruecktem Mausknopf passiert...
      
      if ( (e.which==1)||(linktouched==0)) {
       routeEvent(e); return true;
     }
    
     // hier kommt man jetzt nur hin, wenn
     // a) die Maus ueber dem besagten Link steht und
     // b) die rechte Maustaste gedrueckt wurde...

// Aufruf einer x-beliebigen 'alternativ-' JavaScript Funktion zum rechten Mausknopf
     // ...
  
     return false;   // weitere Bearbeitung des events verhindern
   }

window.onMouseDown=myMouseDownHandler;  // neuen Event-Handler registrieren

//-->
</script>

Ich hab diese Methode bisher nur an Netscape 4.06 getestet.
Wäre sehr daran interessiert, ob diese Methode z.B. auch mit IE4 funktioniert.

Das Kontextmenue ist übrigens nur dann abgeklemmt, wenn man sich direkt über dem
betreffenden Link befindet, an anderer Stelle auf der Seite funktioniert alles wie gewohnt.

Bei aller nun aufkommenden Euphorie (oder auch nicht...?!) sollte man jedoch
immer auch an die Mac-user denken, welche naturgemäß nur über eine
Maustaste verfügen! Sonst finden die das vermutlich echt unfair...

Viele Grüße!

Andreas