Hallo,
if (window.captureEvents) {
window.captureEvents(Event.KEYPRESS);
// auf die eine Zeile vorher (für Netscape 4.X) kommt's nicht an
window.onkeypress=welche;
} else {
document.onkeypress=welche;
}
Nur eine formale Anmerkung:
Wie du schon sagst, die Browserabfrage ist ziemlich spekulativ. window.captureEvents kennen wie gesagt auch Opera, KHTML und Gecko, das heißt, die Methode existiert, ohne eine Wirkung oder Notwendigkeit zu haben.
\*Falls\* window.onkeypress nun in einem dieser Browser \*nicht\* funktionieren würde, und der Handler für document vergeben werden müsste, würde man in der Patsche sitzen. Dass die Koppelung captureEvents + window.onkeypress klappt, ist also eher ein glücklicher Zufall. Eine bessere Abfrage wüsste ich aber auch nicht. ;) Man könnte höchstens untersuchen, ob eine Fallunterscheidung überhaupt nötig ist oder ob eine doppelte Zuweisung nicht für alle Browser reicht. Dann wird der Handler im KHTML und Gecko zwar zweimal aufgerufen (Opera hingegen erkennt den doppelten Handler und feuert nur den von document), aber das sollte nicht weiter stören. (Bzw. dagegen würde notfalls e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); helfen.)
Mathias