2009-05-23 11 views
1

In Google Mail zum Beispiel, wenn man Ctrl + B drückt, anstatt es an den Browser übergeben (was würde normalerweise eine Art Lesezeichen-Manager heraufbringen), entführt es es für Formatierungszwecke, dh einschalten fette Formatierung für die Nachricht in der Mitte von comoposing. Gleich für Ctrl + i, Ctrl + u.Wie Schlüsselkombinationen in Javascript entführen?

Wie wird das gemacht?

+2

Meine Antwort wäre bitte nicht tun ... aber ich bezweifle das ist, was Sie suchen. –

+0

Ja, es ist nicht :) Eigentlich, was ich vorhabe zu tun ist wahrscheinlich nicht so schlimm wie du dachtest: ich würde es für ein Fettmonkey-Skript lokal verwenden. –

+1

Kann jemand bitte Version 1 zurücksetzen? – dmeister

Antwort

0

Verwenden Sie die onkeydown oder onkeyup Ereignis eine Handler-Funktion Feuer:

var body = document.getElementsByTagName("body")[0]; 
body.onkeydown = function(event) { 
    var str = ""; 
    for (var prop in event) { 
     str += prop + ": " + event[prop] + "<br>"; 
    } 
    body.innerHTML = str; 
}; 

Damit Sie sehen können, welche Eigenschaften ein Ereignis Objekt hat.

8

Sie würden dem globalen Objekt document einen onkeydown oder onkeyup Event-Handler beifügen. Zum Beispiel, wenn ich auf die Titelleiste ändern zu „asdf“ jedes Mal Ctrl-M gedrückt wurde, würde ich registrieren, um den Event-Handler durch window.onload, wie diese machen will:

window.onload = function() 
{ 
    document.onkeydown = function(event) 
    { 
     var keyCode; 

     if (window.event) // IE/Safari/Chrome/Firefox(?) 
     { 
      keyCode = event.keyCode; 
     } 
     else if (event.which) // Netscape/Firefox/Opera 
     { 
      keyCode = event.which; 
     } 

     var keyChar = String.fromCharCode(keyCode).toLowerCase(); 

     if (keyChar == "m" && event.ctrlKey) 
     { 
      document.title = "asdf"; 
      return false; // To prevent normal minimizing command 
     } 
    }; 
}; 

W3Schools hat weitere Informationen über die Verwendung dieser Ereignisse: onkeydown und onkeyup.

Außerdem glaube ich, ich sollte zu beachten, dass es einige Unstimmigkeiten in allen Browsern in Bezug auf die Ereigniseigenschaften sind (wie zum Beispiel in Firefox, sollen Sie den Schlüsselcode durch event.which zuzugreifen, während in IE es event.keyCode ist, obwohl Firefox event.keycode -confusing unterstützt, nicht wahr?). Aus diesem Grund würde ich empfehlen, dies durch ein JavaScript-Framework zu tun, wie zum Beispiel Prototype oder , da sie sich um all die icky-Kompatibilitäts-Sachen kümmern.

+0

Können Sie bitte ein Beispiel geben? Zeigen Sie für (Meta- (: P)) Beispiel an, wie der Titel des Dokuments in dem Text "asdf" geändert wird, wenn das Schlüsselkombination STRG + M verwandt wird. Danke, freut mich sehr. –

+0

@asdf: Sicher, ich habe meine Antwort für Sie erweitert. Ich hoffe es hilft. – hbw

+0

@htw: yep, danke viel :) Jetzt ... Sie haben Netscape/Firefox/Oper/ie abgedeckt, macht das Code-Konto für Safari/Chrom? –

3

Hier ist die Quelle für eine HTML-Seite, die jQuery verwendet und tut, was htw's solution tut.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
    <title>Hijack Example</title> 
    <script type="text/javascript" src="../scripts/jquery-1.2.1.js"> 
    </script> 
    <script type="text/javascript"> 
     $(function(){ 
      document.title = "before keypress detected"; 
      $(document).keydown(function(event) { 
       // alert('stuff happened: ' + msg + " " + event.keyCode); 
       var keyChar = String.fromCharCode(event.keyCode).toLowerCase(); 
       if (keyChar == "m" && event.ctrlKey) { 
        document.title = "ctrl-m pressed!"; 
       } 
      }); 
     }); 
    </script> 
    </head> 

    <body id="body"> 
    <p>Change the path to jquery above as needed (search for ../scripts/jquery-1.2.1.js)</p> 
    <p>Watch the title bar, then press control-M, then watch the title bar again!</p> 
    </body> 
</html> 

Hoffe das hilft jemand!