Rechtsklick --> Menü unterdrücken
hubschraubaer
- javascript
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
Hallo hubschraubaer,
Mal blind in die FAQ gegriffen: http://de.selfhtml.org/navigation/faq.htm#rechte_maustaste
Beste Grüße
Richard
Hi!
Mal blind in die FAQ gegriffen: http://de.selfhtml.org/navigation/faq.htm#rechte_maustaste
Oh! Schäm! *rotwerd*
Danke!
ciao, hubschraubaer
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
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
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
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
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
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
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
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
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
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
Hi!
Vielen vielen Dank für deine ausführliche Antwort.
Ich werde es heute ausprobieren! Danke!
ciao, hubschraubaer
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
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.
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
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.
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
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.
<!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>
Vielen vielen Dank für dein Bemühen.
ciao, hubschraubaer
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.
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
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
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
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
Hi!
Ok! Hätt ich wissen sollen! Entschuldigung!
ciao, hubschraubaer
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