📄 utility.backfixer.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 + -