Ausschalten der kompletten Tastaturnavigation des Browsers
dnavra
- browser
Hallo,
ich habe ein Fenster, in dem es keine Browser-Menüs und auch keine weiteren Browser-Toolbars, insbesondere keine Navigationssymbole gibt.
Ich möchte zusätzlich die Navigation über die Tastatur komplett ausschalten, denn der Benutzer soll nur die auf der Seite von mir vorgegebenen Navigationselemente benutzen.
Fragen:
Für eine Hilfe wäe ich sehr dankbar.
Grüße
Dnavra
Hallo dnavra,
- Ist das komplette Ausschalten der Tastaturnavigation überhaupt möglich?
Ich würde spontan sagen, nein. Im IE bekommst Du es vielleicht über ein paar Tricks hin, aber in anderen Browsern definitiv nicht.
- Wenn nicht, kann man zumindest die Navigation über Backspace-Taste unterdrücken, ohne dass die "normale" Texteingabe davon berührt ist?
Du könntest über Eventhandling den Tastendruck abfangen; (siehe zu Eventhandling SELFHTML) ich bin mir nicht ganz sicher, aber ein "return false;" dürfte im Eventhandler die weitere Verarbeitung unterbinden. (wenn es das nicht tut, hast Du Pech gehabt, dann gehts gar nicht)
Wozu brauchst Du denn das? Vielleicht gibt es ja eine bessere Möglichkeit.
Viele Grüße,
Christian
Hallo dnavra,
Hallo Christian,
danke für die schnelle Antwort.
- Ist das komplette Ausschalten der Tastaturnavigation überhaupt möglich?
Ich würde spontan sagen, nein. Im IE bekommst Du es vielleicht über ein paar Tricks hin, aber in anderen Browsern definitiv nicht.
- Wenn nicht, kann man zumindest die Navigation über Backspace-Taste unterdrücken, ohne dass die "normale" Texteingabe davon berührt ist?
Du könntest über Eventhandling den Tastendruck abfangen; (siehe zu Eventhandling SELFHTML) ich bin mir nicht ganz sicher, aber ein "return false;" dürfte im Eventhandler die weitere Verarbeitung unterbinden. (wenn es das nicht tut, hast Du Pech gehabt, dann gehts gar nicht)
»»
Ich habe es jetzt mit "window.captureEvents" und ein "return false" im Falle von Backspace-Taste probiert:
<SCRIPT LANGUAGE = "JavaScript">
function avoidKeyNavigation(event) {
if (event.which == 8)
return false;
}
document.captureEvents(Event.KEYPRESS);
document.onkeypress = avoidKeyNavigation;
</SCRIPT>
Funktioniert unter Netscape sehr gut. Ich kann mir vorstellen, dass ich das auch mit den anderen Tasten hinbekommen.
"window.captureEvents" läuft aber leider nicht unter IE und eigentlich dort brauche ich diese Funktionalität. Gibt es dort etwas vergleichbares?
Wozu brauchst Du denn das? Vielleicht gibt es ja eine bessere Möglichkeit.
Das hat mit dem Workflow der Applikation zu tun. Auf der vorherigen Seite gibt es eine Operation, die zu der aktuellen Seite geführt hat. Diiese darf aber nur einmal ausgeführt werden. Wenn der Benutzer eine Seite zurückgeht und die Operation wiederholt, bekommt er zwar eine Fehlermeldung bzw. eine Ausnahme, so dass keine Inkonsistenzen in den Daten entstehen können. Für eine echte Applikation gehört es aber meiner Meinung nach dazu, dass man eine solche Navigation überhaupt nicht erlaubt.
Als eine andere alternative Lösung wäre wünschenswert, dass immer wenn der Benutzer über die Browsernavigation eine Seite zurückgeht, dass man dann automatisch in der Historie wieder eine Seite nach vorne blättert. Das setzt aber wieder voraus, dass man mitbekommt, dass der Benutzer eine Seite zurückgeblättert hat. Man müsste aber dann auf der vorherigen Seite das mitkriegen und darauf automatisch reagieren. Keine Ahnung ob so etwas überhaupt geht, ohne irgendwelche drüberliegende Framesets zu benutzen.
Viele Grüße,
Christian
Hallo dnavra,
"window.captureEvents" läuft aber leider nicht unter IE und eigentlich dort brauche ich diese Funktionalität. Gibt es dort etwas vergleichbares?
Ja: http://selfhtml.teamone.de/dhtml/modelle/microsoft.htm#event_handler
Mit
if (document.all)
müsstest Du die Unterscheidung treffen können.
Als eine andere alternative Lösung wäre wünschenswert, dass immer wenn der Benutzer über die Browsernavigation eine Seite zurückgeht, dass man dann automatisch in der Historie wieder eine Seite nach vorne blättert. Das setzt aber wieder voraus, dass man mitbekommt, dass der Benutzer eine Seite zurückgeblättert hat. Man müsste aber dann auf der vorherigen Seite das mitkriegen und darauf automatisch reagieren. Keine Ahnung ob so etwas überhaupt geht, ohne irgendwelche drüberliegende Framesets zu benutzen.
Doch, das geht: Du arbeitest Doch sicherlich in Deiner Applikation mit Sessions, oder? Dann kannst Du alle Seiten, auf die der Benutzer zugreift, in der Session protokollieren. Wenn er dann auf "Zurück" klickt, kannst Du das erkennen und daraufhin eine HTTP-302-Weiterleitung auf die nächste gewünschte Seite machen. (oder statt einer HTTP-Weiterleitung ein Meta-Refresh oder was mit JavaScript)
Alternative:
Jedesmal, wenn Du ein Formular verarbeitest, wird die Seite, die dabei erzeugt wird, in einem Cache auf dem Server zwischengespeichert und mit einer ID versehen. Diese Seite wird dann nicht direkt an den Browser geschickt, sondern es wird eine 302-Weiterleitung auf eine Cache-Anzeigeseite gemacht. So wird die Verarbeitungslogik nur einmal ausgeführt, da immer nur die zwischengespeicherte Ergebnisseite aufgerufen wird.
Oder Du könntest Dir nur ein paar Statusinformationen für diese Cache-ID mitspeichern und dann anhand der Statusinformationen die Seite rekonstruieren. Und wenn die Seite zum zweiten Mal aufgerufen wird, könntest Du _zusätzlich_ noch eine Meldung ausgeben, dass die Seite schonmal aufgerufen wurde und außerdem noch alle Formulare deaktivieren.
Es hängt halt vom Einzelfall ab, was eventuell sinnvoll ist.
Viele Grüße,
Christian
Hi Christian,
danke für die Informationen. Um diese zu verarbeiten und zu testen brauche ich allerdings jetzt mehr Zeit :)
Ich werde das Ergebnis später wieder hier veröffentlichen.
Grüße
Arvand