Mira, esto es algo que hice hace un tiempo cuando no conocia el AJAX asi que creo que es Javacript puro. Acepto que puede ser que no este del todo bien, pero hice lo mejor que pude y funciona...
Quizas no es exactamente lo que buscas (creo que tampoco entendi del todo el problema), pero si el tema esta en la variable Events de FF, aca te doy un ejemplo que si funciona.
Lo uso en un popup que sirve para cargar una descripcion, y al cargarse toma algunos datos de la pagina que lo creo para que, al presionar una determinada combinacion de teclas, se pueda "pegar" sin necesidad de ir a la pagina anterior, seleccionar, copiar y despues pegar en el popup. Aclaro que en su momento lo saque del amigo google, pero no recuerdo de donde viene, asi que mayormente no es credito mio
Código:
document.onkeydown = tecladown;
document.onkeyup = teclaup;
keysDown = new Array(); //array que mantiene las teclas que estan siendo presionadas
var primera = 18; //primera tecla que hay que apretar
var segunda1 = 220; //la segunda tecla
var str1 = opener.document.f.hdn_mail.value + ' ';
var segunda2 = 49; //la segunda tecla
var str2 = opener.document.f.hdn_tel1.value + ' ';
var segunda3 = 50; //la segunda tecla
var str3 = opener.document.f.hdn_tel2.value + ' ';
var segunda4 = 51;
var str4 = 'fc. ' + opener.document.f.hdn_ult_fc.value + ' ';
var segunda5 = 52;
var str5 = 'fc. ' + opener.document.f.hdn_anteult_fc.value + ' ';
var segunda6 = 53;
var str6 = ' ' + opener.document.f.hdn_direccion.value + ' ';
function tecladown(Event)// Event appears to be passed by Mozilla
{
// IE does not appear to pass it, so lets use global var
if(Event==null)
Event=event;
if(Event.type!='keydown')
return;
if (keysDown[primera] != true){ //la primera
if(Event.keyCode == primera){
//grabo en ese registro que se apreto la tecla 18 (alt)
keysDown[primera] = true;
}
}
else{
if (Event.keyCode == segunda1 || Event.keyCode == segunda2 || Event.keyCode == segunda3 || Event.keyCode == segunda4 || Event.keyCode == segunda5 || Event.keyCode == segunda6){ //la segunda tecla
var mensaje = document.f.nota.value;
var str_adic
switch (Event.keyCode)
{
case segunda1: str_adic = str1; break;
case segunda2: str_adic = str2; break;
case segunda3: str_adic = str3; break;
case segunda4: str_adic = str4; break;
case segunda5: str_adic = str5; break;
case segunda6: str_adic = str6; break;
}
insertAtCursor(document.f.nota, str_adic);
document.f.nota.focus();
return Event.returnValue = false;
}
else{
//vuelvo el estado de la tecla a falso si la segunda tecla no es ninguna de las configuradas
return Event.returnValue = Event.keyDown;
keysDown[primera] = false;
}
}
}
function teclaup(Event)// Event appears to be passed by Mozilla
{
// IE does not appear to pass it, so lets use global var
if(Event==null)
Event=event;
if(Event.keyCode != primera)
return;
keysDown[primera] = false;
}
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA/NETSCAPE support
else
if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
}
else {
myField.value += myValue;
}
}
Espero que sirva. Saludos!