2012-06-18 48 views
0

我已經用javascript編寫了一個web shell,但它在firefox中不起作用。但在IE和Chrome中,沒關係。我發現在Firefox中我的腳本無法獲得keyevent。那麼我該如何解決這個錯誤?非常感謝:)如何在Firefox中檢測keyevent

殼牌:http://cdqzoi.com

腳本地址:http://cdqzoi.com/console.js 下面的代碼是上面的腳本,它處理的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; 
} 
+0

你正在依賴全局'event'變量。 –

回答

0

寫您的處理程序是這樣的:

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

原因是IE(顯然,Chrome瀏覽器也是如此,選擇通過一個全局變量,而不是函數的參數來傳遞事件數據)。

+0

它的工作原理,謝謝。但我們應該使用「var event」在使用之前。 –

+0

嗯,你是對的,你也可以使用'window.event' –