Javascript 如何在firefox中检测keyevent

Javascript 如何在firefox中检测keyevent,javascript,firefox,Javascript,Firefox,我已经用javascript编写了一个web shell,但它在firefox中不起作用。但在IE和Chrome中,这很好。我发现在firefox中,我的脚本无法获取keyevent。那么我如何修复这个bug呢?非常感谢:) 外壳: 脚本地址: 下面的代码是上面处理keyevent的脚本的一部分 this.keydown=function(){ key=event; keyN=event.keyCode?event.keyCode:event.which?event.which:

我已经用javascript编写了一个web shell,但它在firefox中不起作用。但在IE和Chrome中,这很好。我发现在firefox中,我的脚本无法获取keyevent。那么我如何修复这个bug呢?非常感谢:)

外壳:

脚本地址: 下面的代码是上面处理keyevent的脚本的一部分

this.keydown=function(){
    key=event;
    keyN=event.keyCode?event.keyCode:event.which?event.which:event.charCode;
    if(keyN==0)return;
    if((keyN==8)||(keyN==116)||(key.ctrlKey && keyN==82)){
        if(keyN==8 & !lock){
            this.command = this.command.substr(0,this.command.length-1);
            document.getElementById("console").innerHTML=getPrefix(this.transmit)+this.command;
        }
        try{
            event.returnValue=false;
            event.keyCode=0;
        }catch(e){
            event.preventDefault();
        }
    }
    keyN=0;
}
this.keypress=function(){
    key=event;
    keyN=event.keyCode?event.keyCode:event.which?event.which:event.charCode;
    if(keyN==0)return;
    if(!lock){
        if(keyN==13){
            if(this.transmit==0){
                user=this.command;
                document.getElementById("_console").innerHTML+=document.getElementById("console").innerHTML+"<br />";
                document.getElementById("console").innerHTML='';
                this.transmit=1;
                this.st=1;
            }else
            if(this.transmit==1){
                this.st=0;
                pass=this.command;
                document.getElementById("_console").innerHTML+=document.getElementById("console").innerHTML+"<br />";
                document.getElementById("console").innerHTML="";
                con.login(user,pass);
                try{
                    event.returnValue=false;
                    event.keyCode=0;
                }catch(e){
                    event.preventDefault();
                }
                keyN=0;
                return;
            }else
            if(this.transmit==2){con.execute(this.command);}
            this.command='';
        }else if(keyN==8){
        }else{
            this.command=this.command+String.fromCharCode(keyN);
        }
        if(this.st==0)document.getElementById("console").innerHTML=getPrefix(this.transmit)+this.command;
        else document.getElementById("console").innerHTML=getPrefix(1);
    }
    try{
        event.returnValue=false;
        event.keyCode=0;
    }catch(e){
        event.preventDefault();
    }
    keyN=0;
}
this.keydown=function(){
关键=事件;
keyN=event.keyCode?event.keyCode:event.which?event.which:event.charCode;
如果(keyN==0)返回;
if((keyN==8)| |(keyN==116)| |(key.ctrlKey&&keyN==82)){
if(keyN==8&!lock){
this.command=this.command.substr(0,this.command.length-1);
document.getElementById(“控制台”).innerHTML=getPrefix(this.transmit)+this.command;
}
试一试{
event.returnValue=false;
event.keyCode=0;
}捕获(e){
event.preventDefault();
}
}
keyN=0;
}
this.keypress=函数(){
关键=事件;
keyN=event.keyCode?event.keyCode:event.which?event.which:event.charCode;
如果(keyN==0)返回;
如果(!锁定){
如果(键==13){
if(this.transmit==0){
user=this.command;
document.getElementById(“控制台”).innerHTML+=document.getElementById(“控制台”).innerHTML+“
”; document.getElementById(“控制台”).innerHTML=''; 这个。传输=1; 这个。st=1; }否则 if(this.transmit==1){ 这个。st=0; pass=this.command; document.getElementById(“控制台”).innerHTML+=document.getElementById(“控制台”).innerHTML+“
”; document.getElementById(“控制台”).innerHTML=“”; con.登录(用户,通过); 试一试{ event.returnValue=false; event.keyCode=0; }捕获(e){ event.preventDefault(); } keyN=0; 返回; }否则 如果(this.transmit==2){con.execute(this.command);} this.command=''; }else if(keyN==8){ }否则{ this.command=this.command+String.fromCharCode(keyN); } 如果(this.st==0)document.getElementById(“控制台”).innerHTML=getPrefix(this.transmit)+this.command; else document.getElementById(“控制台”).innerHTML=getPrefix(1); } 试一试{ event.returnValue=false; event.keyCode=0; }捕获(e){ event.preventDefault(); } keyN=0; }
像这样编写处理程序:

this.keypress = function(e) {
  var ev = window.event || e;
  // use ev from here onwards

原因是IE(显然,Chrome也选择通过全局变量而不是函数参数传递事件数据)。

您依赖的是全局
事件
变量。谢谢。但在使用之前,我们应该使用“var事件”。