Thomas Schmieder: Hotkeys für den Browser abfangen

Hallo,

wir schreiben immer noch an unserer Lösung für Arme, einfacher Richtext-Editor in Javascript. Es funktioniert schon fast alles so, wie wir uns das vorstellen.

Allerdings gibt es ein Problem mit den Hotkeys für den Browser.

Wir möchten die Backspace-Taste natürlich zum Rückwärtslöschen nutzen, so wie das seit ca. 22 Jahren bei PC-Programmen üblich ist...

Leider wird die Taste dann aus der Funktion onKeyDown="steuertaste()" an den Browser weitergegeben, der dann, falls vorhanden, im aktiven Fenster in seiner History einen zurückblättert.

Ein return false bei in steurtaste() bewirkt leider gar nichts. Das Überschreiben der Eigenschaft  window.event.keyCode=0  führt dazu, dass der Code nun plötzlich in onkeyPress="asciitaste()" auftaucht. Bei Backspace macht das kein Problem, da es sich beide male um #8 handelt und #8 als darstellbares Zeichn nicht gebraucht wird.

Bei anderen Tasten ist das allerdings ein Problem.

Dann gibts da noch die Leertaste, die zwischen den Elementen in einer Webseite weiterschaltet.

Gibts nicht ne ganz offizielle Möglichkeit, diese Funktionen aus JavaScript heraus auszuschalten?

Sonst müssten wir wieder eine Krücke bauen und alle Eingaben über ein input-Feld führen und dann erst in unseren Eingabepuffer überführen. Nur wie bekomm ich das dann wieder "unsichtbar" und trotzdem aktiv? --> CSS???

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  1. Hi Tom,

    wir schreiben immer noch an unserer Lösung für Arme, einfacher Richtext-Editor in Javascript. Es funktioniert schon fast alles so, wie wir uns das vorstellen.
    Allerdings gibt es ein Problem mit den Hotkeys für den Browser.
    Wir möchten die Backspace-Taste natürlich zum Rückwärtslöschen nutzen, so wie das seit ca. 22 Jahren bei PC-Programmen üblich ist...
    Leider wird die Taste dann aus der Funktion onKeyDown="steuertaste()" an den Browser weitergegeben, der dann, falls vorhanden, im aktiven Fenster in seiner History einen zurückblättert.

    Hab das grade probiert. Mozilla macht Backspaces in einem textarea... - wenn allerdings die textarea _nicht_ den focus hat, dann kannste nichts machen, aber sonst verstehe ich das problem nicht...

    Fabian

    1. Hi Fabi,

      wir arbeiten nicht mit einer Textarea, weil die so schlecht die Formatierung darstellen kann. Die ganze Anzeige findet in einem DIV statt.

      Ein Div kann zwar scheinbar den Focus erhalten, obwohl es ja kein Dialogobjekt ist, aber leider fängt es das Backspace und Space usw nicht ein (so wie die Textarea).

      Welche Browser-Steuertasten gibt es denn sonst noch, die man eigentlich für die Editorfunktionen brauchen würde?

      • Backspace
      • Space
      • Funktionstasten
        ...

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hi Tom,

        wir arbeiten nicht mit einer Textarea, weil die so schlecht die Formatierung darstellen kann. Die ganze Anzeige findet in einem DIV statt.

        Ja, das sagtest du, entschuldige.

        Ein Div kann zwar scheinbar den Focus erhalten, obwohl es ja kein Dialogobjekt ist, aber leider fängt es das Backspace und Space usw nicht ein (so wie die Textarea).

        Logisch. Man könnte für diese "Steuertasten" Ersatz-Funktionen schreiben, und über Buttons ansteuern. Die Funktion backspace(); würde halt das letzte Zeichen vor dem Fokus löschen. Das Problem ist, dass das das Problem nicht löst, dass der Backspace im IE eine Seite zurück geht...

        Welche Browser-Steuertasten gibt es denn sonst noch, die man eigentlich für die Editorfunktionen brauchen würde?

        • Backspace
        • Space
        • Funktionstasten
          ...

        Kurz gesagt den gesamten Num-Block, und der wiederum ist (bei mir) mit manch anderen Funktionen versehen...
        Und da fällt mir ein weiteres Problem ein (Da ich gerade unter Debian poste...): Wie gehen wir mit (u.U.) unterschiedlichen Tastaturen um? Es kann ja sein, dass jemand eine andere Keymap verwendet, und dann zeigt der "Arbeitsbereich" (also das Div) doch u.U. Unsinn an, oder?
        Und: Hab ihr schon Workarounds für die Zeilenumbrüche?

        Fabian

        1. Hallo, Fabian,

          Kurz gesagt den gesamten Num-Block, und der wiederum ist (bei mir) mit manch anderen Funktionen versehen...
          Und da fällt mir ein weiteres Problem ein (Da ich gerade unter Debian poste...): Wie gehen wir mit (u.U.) unterschiedlichen Tastaturen um? Es kann ja sein, dass jemand eine andere Keymap verwendet, und dann zeigt der "Arbeitsbereich" (also das Div) doch u.U. Unsinn an, oder?
          Und: Hab ihr schon Workarounds für die Zeilenumbrüche?

          Die "normalen" Editorfunktionen

          • Schreiben
          • Cursor rechts
          • Cursor links
          • backspace
          • delete
          • pos1
          • end
          • tag bold       |
          • tag italic     | alle mit begin und end
          • tag underline  | damit keine unbalancierten tags entstehen
          • tag style:color|
          • Zeilenumbruch
          • Sonderzeichenersetzung
          • Absenden des Textes an PHP

          funktionieren alle schon

          Das Div scrollt auch ganz wunderbar, wenn es mehr Text wird, als reinpasst.

          Nun muss noch

          • Font
          • Zwangsumbruch
          • Einzug für Listen (mit Aufzählungszeichen)
          • Attribut-Tags entfernen (natürlich balanciert)
          • link einbauen (da weiß ich noch nicht, wei ich das mache, der
                             eigenliche Link wir in einer extra Liste an PHP übergeben
                             im Text muss nur ein starttag <L-1> </L-1> stehen oder so...)
          • Zeile rauf
          • Zeile runter (also laufen bis hinter den nächsten Break)
          • Copy und Paste
            ...
            ...

          eingebaut werden.

          Was könnte man denn an elementaren Funktionen sonst noch brauchen? Es geht ja "nur" um Textbearbeitung.

          Nur ärgerlich, dass so die Maus nicht nutzbar ist für die Cursorpositionierung. Und auch die Geschichte mit Markierung und dann dafür das Format setzen wäre toll.

          Dann müssen wir die anderen Browser noch einpflegen. Die elementaren Funktionen, die wir gebaut haben, funktionieren aber auf ner ganzen Reihe. Nur das andere eventCaching macht mir noch etwas Arbeit, da ja in Netscape die onXxxxxYyyy-Funktionen trotzdem irgendwelche Eirkung haben.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.