Avatar billede madd Nybegynder
20. april 2002 - 03:06 Der er 10 kommentarer og
1 løsning

Fange højremuseklik i NS/Mozilla.

God aften :)


Hvordan fanger jeg højremusekliks i Mozilla/Netscape?

Problemet ligger i, at IE har den property der hedder "oncontextmenu" hvilken udfører en funktion når man højreklikker på sit element. Denne funktion findes ikke i Netscape / Mozilla og jeg ville gerne have min custom-menu til at virke i alle browsere.

Jeg har prøvet med flg:

function doRightClick() {
if(navigator.appName=='Netscape' && e.which=='3') {
alert('højre mus klikket!');
return false;
}
}

- intet held!

Nogen der kan komme med en lidt mere holdbar løsning/source? :)
Avatar billede madd Nybegynder
20. april 2002 - 03:13 #1
desuden - hvad hedder henholdsvis window.event.x og window.event.y for netscape / mozilla's vedkomne?

10 points oveni til manden eller damen med svaret på det.
Avatar billede snigermunken Nybegynder
20. april 2002 - 03:28 #2
Hvis du er nød til at spørger, har du ikke noget at skjule.

Hvorfor fjerne muligheden for at højreklikke?
Avatar billede madd Nybegynder
20. april 2002 - 04:22 #3
Hm. Har jeg faktisk beskrevet. Grunden til dette er, at jeg har lavet "min egen" menu der popper frem ved højreklik af nogle bestemte links. Der er bl.a. en hjælpe funktion osv. Denne menu virker imidlertigig kun til IE da jeg ikke kan fange højre musekliks i Netscape / Mozilla.

Som sagt - det skal bruges som en ekstra funktion for brugeren til at få flere valgmuligheder / hjælp - ikke som en "dU mÅ IkKe tAgE mIn SouRcE! PuHbÆh" - jeg går ind for opensource.
Avatar billede kimiwan Nybegynder
20. april 2002 - 06:20 #4
hehe.. det er ikke så meget det med open source, der er så latterligt ved folk der fanger højre museklik og viser en copyright alert..

Det er mere det at de forringer brugervenligheden på deres site væsentligt, samtidig med at man alligevel på mindre end 10 sekunder kan se deres kode, hvis det er det, man ønsker.
Avatar billede madd Nybegynder
20. april 2002 - 14:18 #5
kimiwan : det ville være rart hvis du gad at læse hvad jeg skriver. Som sagt skal det IKKE bruges som noget copyright alert - jeg gentager - IKKE som copyright!

Hvor meget forringer man brugervenligheden på sin side, hvis man har de samme menuer som altid - men med endnu flere muligheder? Det kan da kun være en forøgelse af brugervenligheden!



Jeg håber stadig på en venlig sjæl der kan svare på mit spørgsmål.


Mvh. Mattias
Avatar billede snigermunken Nybegynder
20. april 2002 - 15:00 #6
Sorry det var alert('højre mus klikket!'); der fik mig til at ignorere resten af teksten :)

Men jeg syntes stadig ikke det er fedt nå en side laver om på min browser og mit højreklik, men det er op til dig.

Jeg blander mig uden om nu.
Avatar billede =maddog= Nybegynder
21. april 2002 - 03:46 #7
når en event bliver affyret i NS dannes et Event objekt der tages som argument i den kaldte funktion. så f.eks:
function doRightClick(obj,e) {
obj.xoff = e.pageX
obj.yoff = e.pageY
}
vil sætte xoff og yoff i obj objektet til x og y coordinatet (hvilket svarer til window.event.x & y i IE)
oncontextmenu virker også i NS6. følgende er afprøvet
<html><head><script>
onload = function() {
    oncontextmenu = function(e) {
        obj = document.getElementById('dbug')
        obj.innerHTML = e.pageX +"_"+ e.pageY
    }
}
</script></head><body><div id='dbug'>dbug</div></body></html>
oncontextmenu duer ikke i NS4.
Avatar billede madd Nybegynder
21. april 2002 - 22:35 #8
Efter utallige forsøg, har jeg stadig ikke kunne få grejet det til det jeg ville.


Lad mig beskrive mit problem:


Jeg har et link (id = link1) hvor jeg gerne vil have højreklik funktionen til at:

flytte et div til en hvis x og y værdi (screenx = x, screeny = y-10)
sætte div'set sttyle.visibiliy til visible

Dette vil jeg gerne have til at virke både i Netscape / Mozilla / IE.

Jeg har forsøgt en del med det stykke kode du gav mig, men som sagt uden held.

Kan du evt. hjælpe mig lidt mere? Self. for flere points.


Mvh. Mattias
Avatar billede =maddog= Nybegynder
22. april 2002 - 03:15 #9
Denne gang testet i NS6.2 og IE6
<html><head><script>
onload = function() {
    document.oncontextmenu = function(e) {
        if (document.all) { // ie
          xval = event.x ; yval = event.y;    
        } else if (!document.all && document.getElementById) { // ns6
              xval = e.pageX ; yval = e.pageY;
        }
        obj = document.getElementById('dbug');
        obj.innerHTML = xval +"_"+ yval;
        obj.style.left = xval;
        obj.style.top = yval;
        return false;  // return false == ingen normal menu, return true == normal højreklik menu.
    }
}
</script></head><body><div id='dbug' style="position:absolute;">dbug</div></body></html>
Du må altså selv passe det ind i din kode.
Avatar billede =maddog= Nybegynder
22. april 2002 - 09:35 #10
nu fik jeg ikke læst det ordentligt. du vil gerne have oncontextmenu udelukkende over bestemte links?? hvad med at sætte et globalt flag på de links
<html><head><script>
alternate = false;
onload = function() {
    document.oncontextmenu = function(e) {
        if (document.all) { // ie
          xval = event.x ; yval = event.y;    
        } else if (!document.all && document.getElementById) { // ns6
              xval = e.pageX ; yval = e.pageY;
        }
        if (alternate) {
        obj = document.getElementById('dbug');
        obj.innerHTML = xval +"_"+ yval;
        obj.style.left = xval;
        obj.style.top = yval-10;
        return false;  // return false == ingen normal menu, return true == normal højreklik menu.
        } else {
        return true;
        }
    }
}
</script></head><body><div id='dbug' style="position:absolute;">dbug</div>
<a href=# onmouseover="alternate=true;" onmouseout="alternate=false;">anderledes højremus</a>
</body></html>
Der er sikkert en mere elegant løsning men det der virker.
Avatar billede =maddog= Nybegynder
26. april 2002 - 16:32 #11
Okey lige en bemærkning mere her. Jeg er ked af at jeg var hurtigt ude.
og NS4 koden er sådan her:
if (document.layers) {
window.captureEvents(Event.MOUSEDOWN);
window.onmousedown = function(e) { if (e.which == 3)  return false; }
}
for en contextmenu
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester