⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.backfixer.js

📁 简单博客功能实现
💻 JS
字号:

//用于解决Ajax中浏览器前进后退按钮的失效问题,需要指定一个
X2.Utility.BackForwardFixer=Class.create();
X2.Utility.BackForwardFixer.prototype={
    initialize:function(basePath){
        this.backStack=[];
        this.forwardStack=[];
        this.maxDepth=10;
        if(isie()){
            this.baseSrc=basePath||'/bffHack.aspx';
            this.iframe=$se('iframe');
            this.iframe.src=this.baseSrc+'?s='+(Math.random()+0.1);
            document.body.appendChild(this.iframe);
            Element.hide(this.iframe);
        }
        
        //用于保存当前状态的callback
        this.currentCallback=null;

        
        //检查是否按下后退或者前进按钮
        this.lastArg='';
        this.arrForwardArgs=[];
        //this.arrBackArgs=[];
        var self=this;
        new PeriodicalExecuter(function(){
            try{
                var arg;
                if(isie()){
                    if(!self.isLoaded())return;
                    arg=self.iframe.contentWindow.document.body.innerHTML;
                }else{
                    arg=location.hash;
                }
                
                //表示发生了变化,此刻判断是前进还是后退
                if(arg!=self.lastArg){
                    //前进
                    if(self.arrForwardArgs.include(arg)){
                        self.arrForwardArgs=self.arrForwardArgs.without(arg);
                        while(self.arrForwardArgs.length>self.maxDepth)self.arrForwardArgs.shift();
                        self.forward();
                    //后退
                    }else{
                        self.arrForwardArgs.push(self.lastArg);
                        self.back();
                    }
                }else{
                    
                }
                self.lastArg=arg;

            }catch(e){}
        },0.2);
    }
    ,isLoaded:function(){
        try{
            return this.iframe.contentWindow.document.body.innerHTML;
        }catch(e){}
        return false;
    }

    ,add:function(callback,currentCallback){

        this.forwardStack.length=0;
        this.arrForwardArgs.length=0;
        this.currentCallback=currentCallback;
        this.backStack.push(callback);

        while(this.backStack.length>this.maxDepth)this.backStack.shift();
        
        //保证正常操作不会被认为点击了前进后退按钮      
        if(isie()){
            this.lastArg=Math.random()+0.1;
            this.iframe.contentWindow.document.body.innerHTML='';
            this.addHistory(this.lastArg);
        }else{
            this.lastArg=location.hash;
        }

    }
    
    //进行后退操作
    ,back:function(){
        if(!this.backStack.length)return;
        var callback=this.backStack.pop();
        this.forwardStack.push(this.currentCallback);
        this.currentCallback=callback;
        callback && callback();
    }
    
    //进行前进操作
    ,forward:function(){
        if(!this.forwardStack.length)return;
        var callback=this.forwardStack.pop();
        this.backStack.push(this.currentCallback);
        this.currentCallback=callback;
        callback && callback();

    }
    //检查状态,以判断浏览器是否按下了前进后退按钮
    ,checkState:function(){
    
    }
    //用newNode节点代替oldNode
    ,replace:function(newNode,oldNode){
        oldNode.parentNode.replaceChild(newNode,oldNode);
    }
    
    //
    ,addHistory:function(s){
        this.iframe.src=this.baseSrc+'?s='+s;
    }
    ,isBegin:function(){
        return this.backStack.length==0 && this.forwardStack.length==0;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -