0

javascriptを使用してWebシェルを作成しましたが、Firefoxでは機能しません。しかし、IEとChromeでは問題ありません。Firefoxでは、スクリプトがキーイベントを取得できないことがわかりました。では、どうすればこのバグを修正できますか?どうもありがとう :)

シェル: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;
}
4

1 に答える 1

0

ハンドラーを次のように記述します。

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

その理由は、IE(そして明らかにChromeも、関数の引数ではなくグローバル変数を介してイベントデータを渡すことを選択している)です。

于 2012-06-18T03:58:39.197 に答える