hubschraubaer: Rechtsklick --> Menü unterdrücken

Hi!
Ich möchte gerne ein Rechtsklickmenü machen. Soweit habe ich auch schon alles. Ich habe nur das Problem, dass bei einem Rechtsklick das Menü des Browsers _und_ "mein" Menü angezeigt wird. Ich würde gerne das Menü des Browsers unterdrücken bzw. ausschalten. (Wie) geht das?
Vielen Dank für eure Antworten!
ciao, hubschraubaer

  1. Hallo hubschraubaer,

    Mal blind in die FAQ gegriffen: http://de.selfhtml.org/navigation/faq.htm#rechte_maustaste

    Beste Grüße
    Richard

    1. Hi!

      Mal blind in die FAQ gegriffen: http://de.selfhtml.org/navigation/faq.htm#rechte_maustaste

      Oh! Schäm! *rotwerd*
      Danke!
      ciao, hubschraubaer

  2. Hello out there!

    Ich möchte gerne ein Rechtsklickmenü machen.

    „Regel Nummer Eins der Usability: Was Du möchtest, ist egal. Was möchte der Benutzer?“ [Cheatah]

    Was nicht heißen soll, das die _Erweiterung_ des Menüs sinnvoll sein kann.

    Allerdings unterbinden moderne Browser auf Wunsch des Nutzers die Veränderung des Menüs mit JavaScript, was dein Vorhaben scheitern lässt.

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. Hi!

      Ich möchte gerne ein Rechtsklickmenü machen.

      „Regel Nummer Eins der Usability: Was Du möchtest, ist egal. Was möchte der Benutzer?“ [Cheatah]

      Was nicht heißen soll, das die _Erweiterung_ des Menüs sinnvoll sein kann.

      Ok, dann drücke ich mich noch genauer aus. Ich würde gerne verstehen, wie ein solches Menü funktioniert. Um das zu kapieren will ich es "nachbauen". Ich habe nicht vor es auf meiner Website einzufügen. Damit betrifft es nicht den User und somit ist der Wille des Users hierbei unwichtig. Aber trotzdem vielen Dank! :-)
      ciao, hubschraubaer

    2. Hallo Gunnar,

      Was nicht heißen soll, das die _Erweiterung_ des Menüs sinnvoll sein kann.

      verdammt, immer diese Probleme mit einfacher und doppelter Verneinung!
      Es heißt also, dass die Erweiterung des Menüs _nicht_ sinnvoll ist?

      Du meintest wohl:

      Was nicht heißen soll, das die _Erweiterung_ des Menüs Unsinn sein muss.

      Wobei ich mich allerdings frage: Wie kann man denn das Kontextmenü _erweitern_? Mal abgesehen vom Moz/Firefox, wo ich mir vorstellen kann, dass man mit XUL etwas deichseln könnte, müsste man dafür in den Code des Browsers eingreifen oder ein Plugin/eine Browsererweiterung installieren. Das meintest du doch sicher nicht, oder? Also verstehe ich deine Anmerkung, nachdem ich sie korrigiert habe, mal als rein hypothetische Aussage. Letztendlich ist eine Erweiterung des Kontextmenüs allein durch den Code der Webseite IMHO nicht möglich.

      Allerdings unterbinden moderne Browser auf Wunsch des Nutzers die Veränderung des Menüs mit JavaScript, was dein Vorhaben scheitern lässt.

      ACK.

      Schönes Wochenende noch,
       Martin

      --
      Wichtig ist, was hinten rauskommt.
        (Helmut Kohl, 16 Jahre deutsche Bundesbirne)
      1. Hello out there!

        verdammt, immer diese Probleme mit einfacher und doppelter Verneinung!

        Verdammt!

        Du meintest wohl:

        Was nicht heißen soll, das die _Erweiterung_ des Menüs Unsinn sein muss.

        Ja; und ich wollte das so ausdrücken:
        Was nicht heißen soll, das die _Erweiterung_ des Menüs nicht sinnvoll sein kann.

        Wobei ich mich allerdings frage: Wie kann man denn das Kontextmenü _erweitern_?

        Mein Gedanke war nicht auf Webbrowser beschränkt. SVN tut das bspw. mit dem Kontetxtmenü des Windows Explorers.

        […] müsste man dafür in den Code des Browsers eingreifen oder ein Plugin/eine Browsererweiterung installieren. Das meintest du doch sicher nicht, oder?

        Das beantworte ich lieber nicht mit ja oder nein – wegen immer dieser verdammten Probleme mit einfacher und doppelter Verneinung. ;-)

        Ich meinte, eine Erweiterung des Menüs könnte sinnvoll sein, ist vom Webseitenautor für den Browser des Nutzers (bei entsprechender Einstellung) aber nicht machbar.

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
      2. Ich grüsse den Cosmos,

        Wobei ich mich allerdings frage: Wie kann man denn das Kontextmenü _erweitern_?

        Ich hab sowas mal realisiert, allerdings mehr als Spielerei, weil ich sowas für eine Webseite nicht eisnetzen würde.
        Ich hab, je nach Mausposition, das "neue" Menü _neben_ dem Originalmenü angezeigt. Allerdings war das mehr ein Ratespiel, weil das Kontextmenü nicht immer da öffnet, wo man es gerne hätte ;)

        Möge das "Self" mit euch sein

        --
        Ich bin keine Signatur, ich fülle nur diesen leeren Platz mit sinnlosen Worten
  3. Hi!
    Ich habe nochmals eine kleine Frage. JS fragt mit dieser Funktion
    ___________________________________
    function Mausklick (Ereignis) {
      if (!Ereignis)
        Ereignis = window.event;
      var x = Ereignis.screenX;
      var y = Ereignis.screenY;
    }
    document.onclick = Mausklick;
    ___________________________________
    die Mausposition ab. Um das Menü jetzt zu positionieren würde ich gerne per document.getElementById("menu").style das Menü absolut positionieren. Aber wie funktioniert das? Kann ich das irgendwie so erreichen(?):

    document.getElementById("menu").style.position = "absolute; left:x; top:y;"
    ^^also das funktioniert leider nicht! :-(
    Ich bin sehr dankbar für jede Hilfe!
    ciao, hubschraubaer

    1. Hi

      document.getElementById("menu").style.position = "absolute; left:x; top:y;"

      document.getElementById("menu").style.position = "absolute";  
      document.getElementById("menu").style.left = x;  
      document.getElementById("menu").style.top = y;  
      
      

      mfg
      Genie

    2. Hallo,

      JS fragt mit dieser Funktion
      ___________________________________
      function Mausklick (Ereignis) {
        if (!Ereignis)
          Ereignis = window.event;
        var x = Ereignis.screenX;
        var y = Ereignis.screenY;
      }
      document.onclick = Mausklick;
      ___________________________________
      die Mausposition ab.

      screenX und screenY speichern die Mauszeiger-Position relativ zum Koordinatenursprung des Bildschirms.

      Wenn du Werte für top und left haben willst, kannst du nicht mit screenX/Y arbeiten. Da brauchst du Werte relativ zum Viewport-Koordinatenursprung (= obere linke Ecke des Dokuments).

      http://www.quirksmode.org/js/events_properties.html#link8

      Mathias

      1. Hi!
        Danke für eure Antworten. Und auch vielen Dank für den hilfreichen Link, Molily.
        Ich habe diese Funktion
        ________________________________________________________________
        function doSomething(e) {
         var posx = 0;
         var posy = 0;
         if (!e) var e = window.event;
         if (e.pageX || e.pageY)  {
          posx = e.pageX;
          posy = e.pageY;
         }
         else if (e.clientX || e.clientY)  {
          posx = e.clientX + document.body.scrollLeft
           + document.documentElement.scrollLeft;
          posy = e.clientY + document.body.scrollTop
           + document.documentElement.scrollTop;
         }
        }
        ________________________________________________________________

        reinkopiert. Die Javascriptkonsole von Firefox sagt aber, dass "e" nicht definiert sei. Was mache ich falsch?

        An welcher Stelle muss ich folgendes in diese Funktion schreiben?
        ________________________________________________________________
          document.getElementById("menu").style.position = "absolute";
          document.getElementById("menu").style.left = posx;
          document.getElementById("menu").style.top = posy;
        ________________________________________________________________

        Vielen vielen Dank für eure Anworten!
        ciao, hubschraubaer

        1. Hallo,

          function doSomething(e) {
          var posx = 0;
          var posy = 0;
          if (!e) var e = window.event;
          if (e.pageX || e.pageY)  {
            posx = e.pageX;
            posy = e.pageY;
          }
          else if (e.clientX || e.clientY)  {
            posx = e.clientX + document.body.scrollLeft
             + document.documentElement.scrollLeft;
            posy = e.clientY + document.body.scrollTop
             + document.documentElement.scrollTop;
          }
          }

          reinkopiert. Die Javascriptkonsole von Firefox sagt aber, dass "e" nicht definiert sei. Was mache ich falsch?

          Das Event-Objekt wird übergeben, wenn diese Funktion als Event-Handler registriert ist und infolge eines Klicks bzw. contextmenu-Events aufgerufen wird.
          Wenn du z.B.
          document.oncontextmenu = eigenesMenu;
          definierst (und die Funktion entsprechend nennst), sollte es gehen.

          An welcher Stelle muss ich folgendes in diese Funktion schreiben?
            document.getElementById("menu").style.position = "absolute";
            document.getElementById("menu").style.left = posx;
            document.getElementById("menu").style.top = posy;

          Einfach ans Ende der obigen Funktion anfügen, wenn posx und posy berechnet wurden.

          Am Ende der Funktion sollte return false; stehen, damit das Standard-Kontextmenü nicht eingeblendet wird. Das wirkt aber wie gesagt nicht, wenn der Browser nicht entsprechend liberal eingestellt ist.

          Mathias

          1. Hi!
            Vielen vielen Dank für deine ausführliche Antwort.
            Ich werde es heute ausprobieren! Danke!
            ciao, hubschraubaer

            1. Hi!
              Bei mir zeigt Firefox immer noch an, dass "e is not defined". Was mache ich da falsch?
              So sieht die Funktion jetzt aus:

              document.oncontextmenu = Menu(e);

              function Menu(e) {
               var posx = 0;
               var posy = 0;
               if (!e) var e = window.event;
               if (e.pageX || e.pageY)  {
                posx = e.pageX;
                posy = e.pageY;
               }
               else if (e.clientX || e.clientY)  {
                posx = e.clientX + document.body.scrollLeft
                 + document.documentElement.scrollLeft;
                posy = e.clientY + document.body.scrollTop
                 + document.documentElement.scrollTop;
               }
              document.getElementById("menu").style.display = "block";
              document.getElementById("menu").style.position = "absolute";
              document.getElementById("menu").style.left = posx;
              document.getElementById("menu").style.top = posy;
              }

              Vielen Dank für eure Hilfe! Das ist echt nett! Danke!
              ciao, hubschraubaer

              1. Bei mir zeigt Firefox immer noch an, dass "e is not defined". Was mache ich da falsch?
                So sieht die Funktion jetzt aus:

                document.oncontextmenu = Menu(e);

                So, hat es dir sicher keiner gezeigt.
                so rufst du die Funktion Menu() auf mit einem unbekannten Parameter e (wie FF richtig bemäkelt).

                Du musst dem Eventhandler nur die Funktionsreferenz zuweisen!
                document.oncontextmenu = Menu;

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Hi!
                  Danke schön! Jetzt klappt das mit dem Anzeigen des Menüs. Aber jetzt kommt auch das Menü von Firefox, das ja nicht angezeigt werden soll. Was muss ich jetzt noch verändern?

                  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;

                  document.oncontextmenu = Menu;

                  function Menu(e) {
                   var posx = 0;
                   var posy = 0;
                   if (!e) var e = window.event;
                   if (e.pageX || e.pageY)  {
                    posx = e.pageX;
                    posy = e.pageY;
                   }
                   else if (e.clientX || e.clientY)  {
                    posx = e.clientX + document.body.scrollLeft
                     + document.documentElement.scrollLeft;
                    posy = e.clientY + document.body.scrollTop
                     + document.documentElement.scrollTop;
                   }
                  document.getElementById("menu").style.display = "block";
                  document.getElementById("menu").style.position = "absolute";
                  document.getElementById("menu").style.left = posx;
                  document.getElementById("menu").style.top = posy;
                  }

                  Liegt es an den 2 document.oncontext=menu; ? Wenn ja, wie kann ich das dann anders machen?

                  Vielen vielen Dank für eure Antworten.
                  ciao, der dankbare hubschraubaer

                  1. Danke schön! Jetzt klappt das mit dem Anzeigen des Menüs. Aber jetzt kommt auch das Menü von Firefox, das ja nicht angezeigt werden soll. Was muss ich jetzt noch verändern?

                    Das kannst im Menü Extras > Einstellungen > Inhalt > Javascript erweitert > Kontexmenü deaktivieren, einstellen.

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Hi!

                      Das kannst im Menü Extras > Einstellungen > Inhalt > Javascript erweitert > Kontexmenü deaktivieren, einstellen.

                      Das ist bei mir schon deaktiviert! Deswegen müsste es am JavaScript liegen.

                      Dieser erste Teil
                      ___________________________________________________
                      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;
                      ___________________________________________________
                      funktioniert super.

                      Und dieser zweite Teil
                      ___________________________________________________
                       document.oncontextmenu = Menu;

                      function Menu(e) {
                       var posx = 0;
                       var posy = 0;
                       if (!e) var e = window.event;
                       if (e.pageX || e.pageY)  {
                        posx = e.pageX;
                        posy = e.pageY;
                       }
                       else if (e.clientX || e.clientY)  {
                        posx = e.clientX + document.body.scrollLeft
                         + document.documentElement.scrollLeft;
                        posy = e.clientY + document.body.scrollTop
                         + document.documentElement.scrollTop;
                       }
                      document.getElementById("menu").style.display = "block";
                      document.getElementById("menu").style.position = "absolute";
                      document.getElementById("menu").style.left = posx +"px";
                      document.getElementById("menu").style.top = posy + "px";
                      }
                      ___________________________________________________
                      auch.
                      Also müsste es doch am Zusammenspiel dieser beide Teile liegen, oder?
                      Was muss ich verändern?

                      Vielen vielen Dank!
                      ciao, hubschraubaer

                      1. Das kannst im Menü Extras > Einstellungen > Inhalt > Javascript erweitert > Kontexmenü deaktivieren, einstellen.
                        Das ist bei mir schon deaktiviert! Deswegen müsste es am JavaScript liegen.

                        Hast du das angekruezt oder nicht?
                        Wenn du den Menüpunkt angekreuzt hast erlaubst du das deaktiveren des Kontextmenü.

                        document.oncontextmenu = click;
                        ___________________________________________________
                        funktioniert super.

                        Und dieser zweite Teil
                        ___________________________________________________
                        document.oncontextmenu = Menu;

                        So geht's nicht. Dann so:

                        document.oncontextmenu = function(e)
                        {
                        click(e);
                        Menu(e);
                        };

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Hi!
                          Das ist ja nett, dass du mir noch geschrieben hast! Vielen Dank.
                          Ich habe das angekreutzt. Also kann bei mir das Menü deaktiviert oder ersetzt werden.
                          Aber es funktioniert immer noch nicht. Und ich weiß nicht warum :-(

                          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

                          <html>
                          <head>
                           <title>Test</title>
                           <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 = function(e)
                          {
                          click(e);
                          Menu(e);
                          };

                          function Menu(e) {
                           var posx = 0;
                           var posy = 0;
                           if (!e) var e = window.event;
                           if (e.pageX || e.pageY)  {
                            posx = e.pageX;
                            posy = e.pageY;
                           }
                           else if (e.clientX || e.clientY)  {
                            posx = e.clientX + document.body.scrollLeft
                             + document.documentElement.scrollLeft;
                            posy = e.clientY + document.body.scrollTop
                             + document.documentElement.scrollTop;
                           }
                          document.getElementById("menu").style.display = "block";
                          document.getElementById("menu").style.position = "absolute";
                          document.getElementById("menu").style.left = posx +"px";
                          document.getElementById("menu").style.top = posy + "px";
                          }

                          document.onclick = Menu_weg;
                          function Menu_weg() {
                           document.getElementById("menu").style.display = "none";
                          }
                           </script>
                          </head>

                          <body>
                           <span style="white-space:nowrap; background-color:#E0E0FF; padding:1em 2em; display:none;" id="menu">Hier ist das Menü</span>
                          </body>
                          </html>

                          Vielen vielen Dank für dein Bemühen.
                          ciao, hubschraubaer

                          1. Das ist ja nett, dass du mir noch geschrieben hast! Vielen Dank.
                            Ich habe das angekreutzt. Also kann bei mir das Menü deaktiviert oder ersetzt werden.
                            Aber es funktioniert immer noch nicht. Und ich weiß nicht warum :-(

                            Was heißt funktioniert nicht?
                            Es wird das normale Kontextmenü angezeigt und keiner deiner Funktionen ausgeführt?
                            Die JS Konsole ist leer? Keine Meldung?

                            Ich hab grad keinen FF zu Verfügung, kann abei keinen Fehler im code erkennen.

                            Das einzige was mir einfällt, wäre:

                            document.oncontextmenu = function(e)
                            {
                            click(e);
                            Menu(e);

                            return false;

                            };

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
                            1. Hi!
                              Vielen Dank für deine Hilfe und Lösung. Das war der Fehler, warum es nicht funktionierte.
                              Ich bin dir sehr dankbar! Vielen Dank!
                              ciao, hubschraubaer

                  2. Hi,

                    Hi!
                    Danke schön! Jetzt klappt das mit dem Anzeigen des Menüs. Aber jetzt kommt auch das Menü von Firefox, das ja nicht angezeigt werden soll. Was muss ich jetzt noch verändern?

                    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;

                    document.oncontextmenu = Menu;

                    var posx = 0;
                    var posy = 0;
                    document.getElementById("menu").style.left = posx;
                    document.getElementById("menu").style.top = posy;

                    posx und posy sind Zahlen. left und top erlauben keine Zahlen als Wert. Längenangaben wären erlaubt.

                    cu,
                    Andreas

                    --
                    Warum nennt sich Andreas hier MudGuard?
                    Schreinerei Waechter
                    O o ostern ...
                    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                    1. Hi!

                      posx und posy sind Zahlen. left und top erlauben keine Zahlen als Wert. Längenangaben wären erlaubt.

                      Du meinst es sollte noch ein "px" dahinter?
                      Wie würde das aussehen? So(?):

                      document.getElementById("menu").style.left = posx px;

                      Danke!
                      ciao, hubschraubaer

                      1. Hello out there!

                        Du meinst es sollte noch ein "px" dahinter?

                        Ja. "px" ist eine Zeichenkette.

                        Wie würde das aussehen? So(?):
                        document.getElementById("menu").style.left = posx px;

                        Nein. Mit welchem ref:self811;javascript/sprache/operatoren.htm@title=Operator] fügt man in JavaScript Zeichenketten zusammen? Die Umwandlung der Zahl in eine Zeichenkette erledigt der JavaScript-Interpreter automatisch.

                        See ya up the road,
                        Gunnar

                        --
                        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                        1. Hi!
                          Ok! Hätt ich wissen sollen! Entschuldigung!
                          ciao, hubschraubaer

                      2. Hello out there!

                        ref:self811;javascript/sprache/operatoren.htm@title=Operator]

                        Wer hat die Kokus^WKlammer geklaut?

                        http://de.selfhtml.org/javascript/sprache/operatoren.htm@title=Operator

                        See ya up the road,
                        Gunnar

                        --
                        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)