Toon posts:

[Mozilla+Javascript] block F5 key

Pagina: 1
Acties:

Verwijderd

Topicstarter
Traaaaaaanen met tuiten, werkelijk... :'(

En wel door het volgende probleem:
Ik probeer als volgt de key F5 af te vangen in Mozilla (FireFox0.8):
code:
1
body onkeypress="test(event)" onkeydown="test(event)"

en:

code:
1
2
3
4
5
6
7
8
9
10
function test(pkey)
{
    if (pkey.which == 116)
    {
        alert(116);
        event.returnValue=false;
        event.cancel = true;
        return false;
    }
}


In Mozilla krijg ik wel de alert, maar wordt er ook een refresh uitgevoerd! En dat is dus juist wat ik NIET wil. Het lijkt wel of de retun value niet opgepakt wordt.

Ik ben al uren aan het zoeken, en overal kom ik tegen dat een "return false" genoeg moet zijn, of een "event.cancel". Klink inderdaad heel logisch, maar werkt helaas niet :(

Please help!

[ Voor 14% gewijzigd door Verwijderd op 26-04-2004 23:20 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

code:
1
2
3
document.onkeydown = function(e){
               key=event.keyCode?event.keyCode:e.witch;
}


En dan kan je in alle browsers de keycodes uitlezen :)

[ Voor 20% gewijzigd door disjfa op 26-04-2004 23:34 ]

disjfa - disj·fa (meneer)
disjfa.nl


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Verder is test() niet echt een handige functie-naam.. In sommige browsers zelfs gereserveerd geloof ik (kan me in ieder geval herinneren dat ik er een keer problemen mee had :P).

Verder ga ik me heel erg afvragen waarom je dit zou willen.. maar die discussie voeren we al te vaak...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:13

crisp

Devver

Pixelated

als je een event wilt cancellen, dan moet je false returnen naar je eventhandler:

code:
1
<body onkeydown="bla();return false">


verder is het eventmodel van Mozilla gewoon anders; het event-object is geen global object maar wordt als argument meegegeven aan de functie die het afhandelt. Als je netjes een event wilt cancellen gebruik dan de preventDefault() DOM-method.

Intentionally left blank


Verwijderd

of als je dus niet alle keypresses wilt cancellen: onkeydown="return bla()" en in bla al dan niet false returnen

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

???

eerder e.which neem ik aan? :)

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

BetuweKees schreef op 27 april 2004 @ 00:00:
[...]
eerder e.which neem ik aan? :)
:D vaag. hij doet het wel maar nog niet in mozilla geprobeert (opera en IE eik :+)

Vandaar dat ie errorde :D :+

disjfa - disj·fa (meneer)
disjfa.nl


  • Blaise
  • Registratie: Juni 2001
  • Niet online
En als iemand nou rechtermuis > vernieuwen doet of in zijn browser op de refresh button (met die groene pijltjes) drukt? Ik weet niet precies waar je mee bezig bent, maar je kan waarschijnlijk beter ervoor zorgen dat het geen schadelijke gevolgen heeft als een bezoeker de pagina verfrist.

[ Voor 7% gewijzigd door Blaise op 27-04-2004 01:06 ]


Verwijderd

Topicstarter
Blaise schreef op 27 april 2004 @ 01:06:
En als iemand nou rechtermuis > vernieuwen doet of in zijn browser op de refresh button (met die groene pijltjes) drukt? Ik weet niet precies waar je mee bezig bent, maar je kan waarschijnlijk beter ervoor zorgen dat het geen schadelijke gevolgen heeft als een bezoeker de pagina verfrist.
Mee eens, toch wil ik zowieso ook zoveel mogelijk client-side afvangen.
Verder is het window zonder toolbar, dus geen refresh-knop.
Ook wordt het context-menu (rechtermuis) geblocked (werkt in IE, nog niet getest in Mozilla) dus ook op die manier kan de page niet gerefreshed worden. Een stukje javascript zorgt ervoor dat de page elke x seconden een refresh doet.

Verwijderd

Topicstarter
Verwijderd schreef op 26 april 2004 @ 23:55:
of als je dus niet alle keypresses wilt cancellen: onkeydown="return bla()" en in bla al dan niet false returnen
Ja, en dat doe ik dus (zie code in startpost) en dat werkt dus niet! :'(

Verwijderd

Wat misschien nog kan werken is ook bubbleEvent op false zetten. Ik heb ooit ook met toetsaanslagen gespeeld en proberen af te vangen en te zorgen dat ze niet de normale functie hielden en daarvoor was het nodig om bubbleEvent (volgens mij hete hij zo) op false te zetten.

Verwijderd

Topicstarter
Verwijderd schreef op 27 april 2004 @ 10:03:
Wat misschien nog kan werken is ook bubbleEvent op false zetten. Ik heb ooit ook met toetsaanslagen gespeeld en proberen af te vangen en te zorgen dat ze niet de normale functie hielden en daarvoor was het nodig om bubbleEvent (volgens mij hete hij zo) op false te zetten.
Ja, daar ben ik in eerste instantie mee begonnen, maar volgens mij snapt alleen Internet Explorer dat.

Correct me if I'm wrong....

Verwijderd

Zoals crisp al aangaf, het event model van Mozilla is anders (nl. het W3C event model)

meer hierover:
http://www.quirksmode.org/index.html?/js/events_order.html

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Verwijderd schreef op 27 april 2004 @ 09:53:
[...]


Mee eens, toch wil ik zowieso ook zoveel mogelijk client-side afvangen.
Verder is het window zonder toolbar, dus geen refresh-knop.
Ook wordt het context-menu (rechtermuis) geblocked (werkt in IE, nog niet getest in Mozilla) dus ook op die manier kan de page niet gerefreshed worden. Een stukje javascript zorgt ervoor dat de page elke x seconden een refresh doet.
Hmm... als je applicatie het geen probleem vindt dat er gerefreshed wordt is het allemaal nogal nutteloos om dat clientside af te gaan zitten vangen..

99% kun je met een eenvoudige header-redirect oplossen.

Maar goed.. waar sommige ontwikkelaars zich al niet mee bezig houden...

[ Voor 6% gewijzigd door Bosmonster op 27-04-2004 10:40 ]


Verwijderd

Topicstarter
Bosmonster schreef op 27 april 2004 @ 10:39:
[...]
99% kun je met een eenvoudige header-redirect oplossen.
Verklaar je nader, wat bedoel je hiermee?
Maar goed.. waar sommige ontwikkelaars zich al niet mee bezig houden...
Tja... we zijn niet allemaal zo goed als jij natuurlijk. :|

Btw, een refresh is prima, ik wil alleen de hoeveelhied traffic beperken. Ik heb een webbased MSN messenger geschreven (C#) en het blijkt dus dat gebruikers als een gek het chat-window gaan verversen. Dat wil ik tegen gaan.

[ Voor 24% gewijzigd door Verwijderd op 27-04-2004 10:54 ]


Verwijderd

Kan je niet met .NET afvangen wanneer de laatste refresh was...
Als dat eerder was dan een vast aantal secondes, dan kan je met redelijke zekerheid zeggen dat de gebruiker zelf op refresh geklikt heeft. Meld hem dat
dat niet de bedoeling is...
Doet hij het vaker: gewoon geen content naar de client versturen. Pas bij de volgende meta-refresh de content weer versturen...

Op die manier kan de gebruiker refreshen wat hij wil, zonder resultaat... De
enige bandbreedte die het je dan nog kost is de upload... Maar wanneer een gebruiker doorheeft dat refreshen geen zin heeft, dan zal hij er wel gauw mee ophouden.

Verwijderd

Topicstarter
Dat zou als extra stok achter de deur kunnen. Toch wil ik het de gebruiker client side ook zo lastig mogelijk maken ;)
Pagina: 1