schneemann: Shortcuts (Strg+s usw.) auf eigene Funktionen legen?

Hallo,

ich bin dabei eine Webanwendung zu entwickeln, die aussehen soll, wie eine normale Windows-Applikation und die auch per Tastatursteuerung zu bedienen sein soll. Daher wäre es schön, wenn die Standard-Shortcuts (Strg + s, Strg + n) nicht ihre normale Funktion erfüllen würden, sondern eine von mir definierte, kontextabhängige.

Daher möchte ich fragen, ob ihr Möglichkeiten kennt, diese Events abzufangen. Sei es mit einer Firefox-Extension, einer HTC für den IE oder was auch sonst.
Zunächst würde mich interessieren, ob es machbar wäre. Wenn ja, wie könnte ich im Rahmen einer Firefox-Extension auf diese Ereignisse zugreifen bzw. sie abfangen oder ggf. weiterleiten?

Bei meiner bisherigen Recherche wurde ich leider nicht fündig. Vielleicht könnt ihr mir ja ein paar Suchbegriffe liefern.

Vielen Dank!

Ciao

  1. Hallo schneemann,

    ich bin dabei eine Webanwendung zu entwickeln, die aussehen soll, wie eine normale Windows-Applikation und die auch per Tastatursteuerung zu bedienen sein soll.

    Nicht jeder deiner Besucher benutzt Windows und die meisten Tastatursteuerungen, ja so gut wie alle, wirst du nicht detailgetreu nachbauen können, weil der Browser oder das OS sie selbst benutzt ("abfängt" ).

    Daher wäre es schön, wenn die Standard-Shortcuts (Strg + s, Strg + n) nicht ihre normale Funktion erfüllen würden, sondern eine von mir definierte, kontextabhängige.

    geht zumindest mit einem guten Browser (Firefox) nicht. Bei einem schlechten (IE) kannst du ja einfach eines der vielen Sicherheitslöcher nutzen und die Anwendung direkt als "echte" Anwendung auf dem Windows-PC ablaufen lassen ;-) *SCNR*

    Daher möchte ich fragen, ob ihr Möglichkeiten kennt, diese Events abzufangen. Sei es mit einer Firefox-Extension, einer HTC für den IE oder was auch sonst.

    Ahh, du hast direkt Einfluß auf den Client? Warum dann nicht das (fake-)"Programm" wirklich als ein solches programmieren?

    Mit einer Firefox-Extension wäre es vermutlich sicherlich möglich, zumindest die Tastenkombinationen an die Webseite "durch"zureichen, die der Browser selbst abfangen würde (z.B. STRG + N). Das, was "das OS" verarbeitet (z.B. STRG + ALT) wird aber auch eine FF-Extension nicht abfangen können.

    Wenn ein HTC für den IE das könnte, wäre das mal wieder ein weiterer Grund, diesen Browser nicht zu benutzen. Was aber, da du gerade von Microsoft-Technologien sprichst, sicherlich geht, sind diese HTAs von M$. Vor langer, langer Zeit habe ich damit mal gearbeitet. Eine "HTA-Datei" sieht z.B. so aus (nicht lachen, das ist ein altes Relikt, was ich nach einigem Suchen gerade in den Tiefen meiner FEstplatte gefunden habe):

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Death of Kerrigan</title>
    <HTA:APPLICATION
        ID="lalala"
        APPLICATIONNAME="blabla"
        BORDER="yes"
        CAPTION="yes"
        icon="BW.ico"
        SHOWINTASKBAR="yes"
        SINGLEINSTANCE="yes"
        innerborder="no"
        SYSMENU="yes"
        SCROLL="no"
        contextMenu="yes"
        maximizeButton="no"
        minimizeButton="yes"
        windowstate="maximize"
        navigable="yes"

    <meta http-equiv="Page-Exit" content="RevealTrans(Duration=3,Transition=8)">
    <link rel="stylesheet" href="daten/styles.css" type="text/css">
    </head>
    <body scroll="no">
    <table width="100%" height="100%" cellspacing="0" cellpadding="0">
    <tr><td align="center" valign="middle">
    <a href="daten/index2.htm" title="Weiter" class="start"><img src="daten/ersatz.jpg"></a>
    </td></tr></table>
    </body>
    </html>

    Such mal ein bisschen, danach :)

    Grüße,

    Sven

    --
    ich hatte mal meterlange signs, die sind alle weg
    1. Hallo,

      Nicht jeder deiner Besucher benutzt Windows

      Woher weisst Du das?
      Da es sich wie gesagt nicht um eine normale Website handelt, sondern um eine Art Anwendung, könnte man da durchaus Vorgaben machen, wenn die Anwendung tastatursteuerbar sein soll. Sollte es für das betreffende OS nicht gehen, müße der User eben auf Komfort verzichten, die Anwendung würde abe trotzdem ganz normal bedienbar bleiben - eben mit der Maus.

      und die meisten Tastatursteuerungen, ja so gut wie alle, wirst du nicht detailgetreu nachbauen können, weil der Browser oder das OS sie selbst benutzt ("abfängt" ).

      Es geht auch nicht darum, alle Tastaturereignisse abzufangen. Selbstverständlich können und sollen nur die Ereignisse abgefangen werden, die überhaupt bei der Anwendung ankommen. Daher auch meine Beispiele mit Strg + s und Strg + n.

      geht zumindest mit einem guten Browser (Firefox) nicht. Bei einem schlechten (IE) kannst du ja einfach eines der vielen Sicherheitslöcher nutzen und die Anwendung direkt als "echte" Anwendung auf dem Windows-PC ablaufen lassen ;-) *SCNR*

      Das ist mir völlig bewußt und ich empfand meine Formulierung im OP dahingehend als unmißverständlich. Trotzdem nochmal: es soll eine Extension oder vergleichbares sein, da so etwas mit den Rechten einer Seite, die in ein Browserwindow geladen wurde natürlich nicht möglich sein wird.

      Ahh, du hast direkt Einfluß auf den Client?

      Anders wäre mein Vorhaben vermutlich nicht zu realisieren. Daher: ja, ich kann zur Not Vorgaben machen.

      Warum dann nicht das (fake-)"Programm" wirklich als ein solches programmieren?

      Das steht nicht zur Diskussion und das gibt es auch schon ;)

      Mit einer Firefox-Extension wäre es vermutlich sicherlich möglich,

      "vermutlich sicherlich möglich" ist auch mein Kenntnisstand. Ich bräuchte das aber etwas präziser und evtl. auch mit Link oder Beispielcode ;)

      zumindest die Tastenkombinationen an die Webseite "durch"zureichen, die der Browser selbst abfangen würde (z.B. STRG + N). Das, was "das OS" verarbeitet (z.B. STRG + ALT) wird aber auch eine FF-Extension nicht abfangen können.

      Mehr soll die Extension auch gar nicht tun. Das Ding soll sich ja einfach nur wie ein normales Programm verhalten.

      Was aber, da du gerade von Microsoft-Technologien sprichst, sicherlich geht, sind diese HTAs von M$.

      Aha, da werde ich mal etwas weitersuchen. Interessanter für mich wäre aber zunächst eine Firefox Extension.

      Ciao

      1. Hallo schneemann,

        Nicht jeder deiner Besucher benutzt Windows
        Woher weisst Du das?

        Weil ich selbst nicht Windows nutze (sondern im Moment Gentoo Linux mit KDE). Und weil ich sehr viele Leute kenne, die auch kein Windows nutzen, sondern viele verschiedene andere Betriebssysteme mit vielen verschiedenen Browsern.

        Da es sich wie gesagt nicht um eine normale Website handelt, sondern um eine Art Anwendung, könnte man da durchaus Vorgaben machen, wenn die Anwendung tastatursteuerbar sein soll. Sollte es für das betreffende OS nicht gehen, müße der User eben auf Komfort verzichten, die Anwendung würde abe trotzdem ganz normal bedienbar bleiben - eben mit der Maus.

        das klingt schon besser. Ehrlich gesagt würde ich aber von einer Webseite gar nicht erwarten, dass sie, selbst wenn sie im Windows 2000-Style gehalten werden würde, mit Tastenkombinationen steuerbar wären, die meinem Firefox gehören.

        Es geht auch nicht darum, alle Tastaturereignisse abzufangen. Selbstverständlich können und sollen nur die Ereignisse abgefangen werden, die überhaupt bei der Anwendung ankommen. Daher auch meine Beispiele mit Strg + s und Strg + n.

        Beides ist in normalen Browsern für anderes zuständig und wird sich dementsprechend nicht mit JavaScript abfangen lassen (siehe das Posting von derletztekick).

        [...] es soll eine Extension oder vergleichbares sein, da so etwas mit den Rechten einer Seite, die in ein Browserwindow geladen wurde natürlich nicht möglich sein wird.

        Ok, sagen wir, du programmierst eine solche Extension. Wieso sollte sie jemand nutzen? Niemand, der ernsthaft Tastaturkombinationen benutzt (und nur solche Leute würden es auch auf deiner Seite tun), wird sich freiwillig eine Extension installieren, die ihn eben dieser beraubt!

        Und wie stellst du dir das vor? "Bitte laden sie sich diese Extension runter, um meine Seite mit Tastenkombinationen benutzen zu können". Weißt du, dass die Benutzung einer neu geladenen Extension bei Mozilla-Browsern einen (kompletten) Neustart erfordert?

        Ahh, du hast direkt Einfluß auf den Client?
        Anders wäre mein Vorhaben vermutlich nicht zu realisieren. Daher: ja, ich kann zur Not Vorgaben machen.

        "zur Not"? Und was meinst du mit "Vorgaben machen"? D.h.: Entweder man hat Einfluß auf den Client und kann dort laufen lassen, was man will, oder nicht.

        Warum dann nicht das (fake-)"Programm" wirklich als ein solches programmieren?
        Das steht nicht zur Diskussion und das gibt es auch schon ;)

        Wir sind in einem Forum und denken quer. Die Möglichkeit stand nicht nicht zur Diskussion und von deren Existenz wurde auch nie erzählt. Sag mal, worum geht es in deinem Programm überhaupt und warum willst du es auf DHTML "exportieren"? ;)

        zumindest die Tastenkombinationen an die Webseite "durch"zureichen, die der Browser selbst abfangen würde (z.B. STRG + N). Das, was "das OS" verarbeitet (z.B. STRG + ALT) wird aber auch eine FF-Extension nicht abfangen können.
        Mehr soll die Extension auch gar nicht tun. Das Ding soll sich ja einfach nur wie ein normales Programm verhalten.

        Fakt ist: Eine "normale" Webseite verhält sich nicht wie ein normales Programm und wird es nie tun können. Mit deiner Extension, die der Webseite wohl alle Rechte des Browsers einräumen soll (eine solche Extension zu laden wäre Selbstmord, daher würde es niemand freiwillig tun) wäre das auch nicht 100%ig möglich.

        Was aber, da du gerade von Microsoft-Technologien sprichst, sicherlich geht, sind diese HTAs von M$.
        Aha, da werde ich mal etwas weitersuchen. Interessanter für mich wäre aber zunächst eine Firefox Extension.

        Witzig, zunächst bestreitest du alles, was außerhalb der Suppenschüssel von Winzigweich liegt, und dann willst du Firefox, einen Opensource-Browser, benutzen? Sehr seltsam. Da passt was nicht zusammen.

        Grüße,

        Svem

        --
        ich hatte mal meterlange signs, die sind alle weg
        1. Hallo,

          Weil ich selbst nicht Windows nutze [...]. Und weil ich sehr viele Leute kenne, die auch kein Windows nutzen, sondern viele verschiedene andere Betriebssysteme mit vielen verschiedenen Browsern.

          Schön und gut, auch ich nutze nicht nur Windows. Es handelt sich auch nicht um eine Anwendung, auf die jeder zugreifen kann, keine Sorge. Ich kann und will dazu keine genaueren Angaben machen. All das ist zur Beantwortung der eigentlichen Frage auch nicht nötig.

          das klingt schon besser. Ehrlich gesagt würde ich aber von einer Webseite gar nicht erwarten, dass sie, selbst wenn sie im Windows 2000-Style gehalten werden würde, mit Tastenkombinationen steuerbar wären, die meinem Firefox gehören.

          Du wirst aber nicht sehen, dass die Anwendung in Deinem Firefox läuft - Abgesehen vom Icon oben links.

          Es geht auch nicht darum, alle Tastaturereignisse abzufangen. Selbstverständlich können und sollen nur die Ereignisse abgefangen werden, die überhaupt bei der Anwendung ankommen. Daher auch meine Beispiele mit Strg + s und Strg + n.

          Beides ist in normalen Browsern für anderes zuständig und wird sich dementsprechend nicht mit JavaScript abfangen lassen (siehe das Posting von derletztekick).

          Dachte ich auch. derletzekick hat mich allerdings eines Besseren belehrt. Im Firefox läßt sich das jedenfalls machen. Wäre noch wichtig zu wissen, ob das ein Bug ist - dan könnte ich's nicht verwenden, weil das zuverlässig funktionieren muss.

          Ok, sagen wir, du programmierst eine solche Extension. Wieso sollte sie jemand nutzen?

          Jemand der meine Anwendung effizient betreiben will.

          Niemand, der ernsthaft Tastaturkombinationen benutzt (und nur solche Leute würden es auch auf deiner Seite tun), wird sich freiwillig eine Extension installieren, die ihn eben dieser beraubt!

          Na hör mal. Du denkst doch nicht, dass ich eine Extension programmieren will, die das auf jeder Seite tut. Natürlich ist die Extension nur aktiv, wenn der User auf meiner Seite ist.

          Und wie stellst du dir das vor? "Bitte laden sie sich diese Extension runter, um meine Seite mit Tastenkombinationen benutzen zu können". Weißt du, dass die Benutzung einer neu geladenen Extension bei Mozilla-Browsern einen (kompletten) Neustart erfordert?

          Ja, genau so stelle ich mir das vor und ich weiss, dass ich den Firefox neu starten muss. Wie gesagt, verabschiede Dich vom Gedanken einer normalen Website. Meine Anwendung wird beim User stundenlang laufen, an jedem Arbeitstag ;) Da ist das Installieren einer Extension nicht zuviel verlangt - abgesehen davon ja auch gar nicht nötig, wenn Du das Post von derletztekick liest.

          Ahh, du hast direkt Einfluß auf den Client?
          Anders wäre mein Vorhaben vermutlich nicht zu realisieren. Daher: ja, ich kann zur Not Vorgaben machen.

          "zur Not"? Und was meinst du mit "Vorgaben machen"? D.h.: Entweder man hat Einfluß auf den Client und kann dort laufen lassen, was man will, oder nicht.

          Ich könnte wenn ich wollte. Lieber wäre mir natürlich, wenn das nicht nötig wäre - und so sieht's ja derzeit aus :)

          Wir sind in einem Forum und denken quer.

          Das ist auch gut so.

          Die Möglichkeit stand nicht nicht zur Diskussion und von deren Existenz wurde auch nie erzählt. Sag mal, worum geht es in deinem Programm überhaupt und warum willst du es auf DHTML "exportieren"? ;)

          Zum Programm kann ich leider nichts sagen. Es würde die Diskussion um mein eigentliches Problem auch nicht weiterbringen. Die Vorteile von DHTML gegenüber einer normal installierten Anwendung liegen sicher auf der Hand - die Nachteile auch ;)

          Mit deiner Extension, die der Webseite wohl alle Rechte des Browsers einräumen soll (eine solche Extension zu laden wäre Selbstmord, daher würde es niemand freiwillig tun) wäre das auch nicht 100%ig möglich.

          Nein, Du mißverstehst mich. Es geht nur um die Shortcuts. Weiter will ich in das System nicht eingreifen.
          Eine solche Extension wäre sicher kein Selbstmord. Du denkst zu einfach. Naürlich soll die Extension nur bei meiner Anwendung anspringen.

          Was aber, da du gerade von Microsoft-Technologien sprichst, sicherlich geht, sind diese HTAs von M$.
          Aha, da werde ich mal etwas weitersuchen. Interessanter für mich wäre aber zunächst eine Firefox Extension.

          Witzig, zunächst bestreitest du alles, was außerhalb der Suppenschüssel von Winzigweich liegt, und dann willst du Firefox, einen Opensource-Browser, benutzen? Sehr seltsam. Da passt was nicht zusammen.

          Wieso? Für mich paßt das sehr gut zusammen. Ich suche eine Lösung, die möglichst überall läuft. Als Proof of Concept würde mir aber eine Firefox Extension zunächst genügen.

          Ciao

          1. Hallo schneemann,

            [...] Meine Anwendung wird beim User stundenlang laufen, an jedem Arbeitstag ;) Da ist das Installieren einer Extension nicht zuviel verlangt - abgesehen davon ja auch gar nicht nötig, wenn Du das Post von derletztekick liest.
            Na hör mal. Du denkst doch nicht, dass ich eine Extension programmieren will, die das auf jeder Seite tut. Natürlich ist die Extension nur aktiv, wenn der User auf meiner Seite ist.

            Du planst eine (DHTML-) Anwendung für irgendeinen Betrieb als Ersatz für ein richtiges Programm und möchtest so viele Funktionen wie möglich von "richtigen" Programmen kriegen können. Warum sagst du das nicht gleich?

            [...] Ich suche eine Lösung, die möglichst überall läuft. Als Proof of Concept würde mir aber eine Firefox Extension zunächst genügen.
            [...] Du wirst aber nicht sehen, dass die Anwendung in Deinem Firefox läuft - Abgesehen vom Icon oben links.

            Du hast vollen Zugriff auf die Zielcomputer (überall Windows + FF drauf, klar) und suchst die praktischste Möglichkeit.

            Ich denke, HTA ist das Ding schlechthin für dich. Es gibt keine Fensterdekorationen, absolut gar nichts außer dem Fenster (was du super konfigurieren kannst per XML oder JavaScript) und du hast neben den einfachen JavaScript-Objekten aus Webseiten (window.) auch vollen Zugriff auf Windows-Plattformen wie WSH und ähnliche Sachen: Damit kannst du sogut wie alles machen.

            Dann brauchst du dich auch nicht um eine FF-Extension zu kümmern, die eh nur ein potentielles Sicherheitsleck ist.

            Grüße,

            Sven

            --
            ich hatte mal meterlange signs, die sind alle weg
            1. Hallo,

              Du planst eine (DHTML-) Anwendung für irgendeinen Betrieb als Ersatz für ein richtiges Programm und möchtest so viele Funktionen wie möglich von "richtigen" Programmen kriegen können. Warum sagst du das nicht gleich?

              Weil es nicht ganz so ist und mit meiner eigentlichen Frage auch nur am Rande zu tun hat.

              Ich denke, HTA ist das Ding schlechthin für dich. Es gibt keine Fensterdekorationen, absolut gar nichts außer dem Fenster (was du super konfigurieren kannst per XML oder JavaScript) und du hast neben den einfachen JavaScript-Objekten aus Webseiten (window.) auch vollen Zugriff auf Windows-Plattformen wie WSH und ähnliche Sachen: Damit kannst du sogut wie alles machen.

              Danke für den Hinweis, aber ich glaube das ist nicht das, was ich suche. Wenn ich das richtig verstehe, ist HTA eine Möglichkeit eine Application auf Basis des IE zu bauen. Ähnlich wie XUL, oder?
              Ich brauche aber was für's Web. Mit möglichst wenig Zusatzaufwand zur browserübergreifend funktionierenden Anwendung. Wenn sich nun so eine HTA mit einer normalen Webanwendung kombinieren ließe und nur im Bedarfsfall aktiviert würde, wäre mir geholfen.

              Dann brauchst du dich auch nicht um eine FF-Extension zu kümmern, die eh nur ein potentielles Sicherheitsleck ist.

              Potentielles Sicherheitsleck ist richtig. Das Schöne ist ja, dass es beim Firefox ohne Extension oder sonstigen Schnickschnack läuft. Finde ich aus Anwendersicht aber eigentlich nicht OK. Es soll ja nicht jeder meine normalen Browserfunktionen beliebig überscheiben dürfen. Vielleicht ist's doch ein Bug...

              Ciao

  2. Hallo schneemann,

    Daher möchte ich fragen, ob ihr Möglichkeiten kennt, diese Events abzufangen. Sei es mit einer Firefox-Extension, einer HTC für den IE oder was auch sonst.

    Du suchst altKey, ctrlKey, shiftKey?

    Mit freundlichem Gruß
    Micha

    --
    LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
    1. Hallo,

      Du suchst altKey, ctrlKey, shiftKey?

      Nein, suche ich nicht. Hatte ich schon gefunden ;)

      Das hilft mir nur nicht weiter. Ich kann zwar die Events abfangen, sie werden aber trotzdem noch an die Anwendung weitergeleitet. Strg + s öffnet also (verständlicherweise) trotzdem noch ein "Seite speichern" Fenster. Das möchte ich gerne verhindern und das wird sicher nicht aus dem Webseitenkontext heraus möglich sein.

      Ciao

      1. Hallo schneemann,

        »» Hallo,

        Du suchst altKey, ctrlKey, shiftKey?
        Nein, suche ich nicht. Hatte ich schon gefunden ;)

        Ich denke doch...

        Ich kann zwar die Events abfangen, sie werden aber trotzdem noch an die Anwendung weitergeleitet.

        Ja?

          
        <script type="text/javascript">  
        function getKey(e) {  
         if (e.ctrlKey){  
          window.alert(String.fromCharCode(e.which));  
          return false;  
         }  
        }  
        document.onkeypress = getKey;  
        </script>
        

        Ein Strg+N öffnet im Firefox nichts...

        Mit freundlichem Gruß
        Micha

        --
        LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
        1. Hallo,

          Du suchst altKey, ctrlKey, shiftKey?
          Nein, suche ich nicht. Hatte ich schon gefunden ;)
          Ich denke doch...

          Wie dümmlich von mir, an return false habe ich nicht gedacht. Vielen Dank für Deine Hartnäckigkeit, das klappt bei mir im FF nun auch :)

          Nächstes Mal poste ich auch wieder Code, dann kann man sowas gleich ausschließen ;)

          Ciao

          1. Hallo schneemann,

            beachte aber bitte, das es so kein anderer von mir getesteter Browser (Opera 8.54 und IE6) kann und Du hierfür sicher ein work-around benötigst!

            Mit freundlichem Gruß
            Micha

            --
            LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
            1. Hallo,

              beachte aber bitte, das es so kein anderer von mir getesteter Browser (Opera 8.54 und IE6) kann und Du hierfür sicher ein work-around benötigst!

              Ja, habe ich gerade auch gemerkt, trotzdem danke für den Hinweis. Mal schauen, was sich da machen läßt.

              Ciao