Capturando onkeydown en Javascript

Tengo un front-end web para una aplicación AS / 400 CGI que permite el uso de algunas de las teclas F1-F24 (dependiendo de la página), así como subir página, bajar página, etc., estas se pasan al subyacente aplicación que los maneja adecuadamente. Por ejemplo, en una página determinada, un usuario puede presionar el botón F3 o presionar la tecla F3; ambos establecerán la variable CmdKey (oculta) para que tenga un nombre de '_K03' y un valor de 'F03'. El manejo del botón es simple y no tiene problemas. Para manejar a los usuarios presionando una tecla F real en el teclado, he tenido un script compatible con IE durante mucho tiempo que funciona perfectamente:

function setCmdKeyIE() {                                                        
  var cmdkeycode = "";                                                          
  if (window.event.keyCode != 13 &
    window.event.keyCode != 33 &                 
    window.event.keyCode != 34 &
    window.event.keyCode < 112 ) return;         
  window.event.keyCode = window.event.keyCode + 1000;                           
  if (window.event.shiftKey) window.event.keyCode = window.event.keyCode + 1000;
  switch(window.event.keyCode) {                                                
    case 1013: cmdkeycode = "EN"; break; /* Enter */                            
    case 1033: cmdkeycode = "UP"; break; /* Page Up */                          
    case 1034: cmdkeycode = "DN"; break; /* Page Down  */                       
    case 1112: cmdkeycode = "01"; break; /* F1 */                               
    case 1113: cmdkeycode = "02"; break; /* F2 */                               
    ...(F3 thru F24 here)...
    default:   return;                   /* Anything else should be ignored */
  }                                                         
  window.event.cancelBubble = true;                         
  window.event.returnValue = false;                         
  document.forms[0].CmdKey.value = "F" + cmdkeycode;        
  document.forms[0].CmdKey.name = "_K" + cmdkeycode;        
  if (ONSUBMITFUN() == true) document.forms[0].submit();    
}                                                           

Esto no solo establece el elemento CmdKey correctamente, sino que también anula (detiene) el comportamiento predeterminado del navegador (si lo hay) para que no se ejecute (por ejemplo, cuando el usuario presiona F3, el cuadro Buscar no aparece).

La función setCmdKeyIE () se invoca así:

<body onKeyDown="setCmdKeyIE();" onHelp="return false;">

Ahora necesito que esto funcione para Firefox (y, potencialmente, para otros navegadores) y tengo todo tipo de problemas. Inicialmente cambié la función setCmdKeyIE (sí, sé que el nombre debe cambiarse una vez que ya no es específico de IE, ¡pero esa es la menor de mis preocupaciones!) Para obtener el evento como un parámetro (que solo sería el caso con FF, Pensé) o usar el comportamiento actual si no se pasa (con IE). También agregué algún otro procesamiento para detener la propagación de eventos FF, pero no funciona ...

Aquí está el nuevo código que no funciona: ¿puede algún alma amable señalar el error de mis caminos?

function setCmdKey(e) {
  if (!e) {
    var e = window.event; /* IE event-handling */
  }
  var wrkkeyCode = e.keyCode;
  if (wrkkeyCode != 13 &
      wrkkeyCode != 33 &
      wrkkeyCode != 34 &
      wrkkeyCode != 27 &
      wrkkeyCode < 112 ) return;
  wrkkeyCode = wrkkeyCode + 1000;
  if (e.shiftKey) wrkkeyCode = wrkkeyCode + 1000;
  var cmdkeycode = "";
  switch(wrkkeyCode) {
    case 1013: cmdkeycode = "EN"; break; /* Enter */
    case 1033: cmdkeycode = "UP"; break; /* Page Up */
    case 1034: cmdkeycode = "DN"; break; /* Page Down  */
    case 1112: cmdkeycode = "01"; break; /* F1 */
    case 1113: cmdkeycode = "02"; break; /* F2 */
    ...(F3 thru F24 here)...
    default:   return;               /* Anything else should be ignored */
  }
  if (e.stopPropagation) {           /* FF */
    e.stopPropagation();
    e.preventDefault();
  }
  else {                             /* IE */
    e.cancelBubble = true;
    e.returnValue = false;
  }
  document.forms[0].CmdKey.value = "F" + cmdkeycode;
  document.forms[0].CmdKey.name = "_K" + cmdkeycode;
  if (ONSUBMITFUN() == true) document.forms[0].submit();
}

¿Necesito devolver false de setCmdKeyIE con FF? ¿Es esto cierto incluso si este procedimiento devuelve falso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta