/**
|
* jQuery ajax history plugins
|
* @author ZhangHuihua@msn.com
|
*/
|
|
|
(function($){
|
|
$.extend({
|
|
History: {
|
_hash: new Array(),
|
_cont: undefined,
|
_currentHash: "",
|
_callback: undefined,
|
init: function(cont, callback){
|
$.History._cont = cont;
|
$.History._callback = callback;
|
var current_hash = location.hash.replace(/\?.*$/, '');
|
$.History._currentHash = current_hash;
|
if ($.browser.msie) {
|
if ($.History._currentHash == '') {
|
$.History._currentHash = '#';
|
}
|
$("body").append('<iframe id="jQuery_history" style="display: none;" src="about:blank"></iframe>');
|
var ihistory = $("#jQuery_history")[0];
|
var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
|
iframe.open();
|
iframe.close();
|
iframe.location.hash = current_hash;
|
}
|
if ($.isFunction(this._callback))
|
$.History._callback(current_hash.skipChar("#"));
|
setInterval($.History._historyCheck, 100);
|
},
|
_historyCheck: function(){
|
var current_hash = "";
|
if ($.browser.msie) {
|
var ihistory = $("#jQuery_history")[0];
|
var iframe = ihistory.contentWindow;
|
current_hash = iframe.location.hash.skipChar("#").replace(/\?.*$/, '');
|
} else {
|
current_hash = location.hash.skipChar('#').replace(/\?.*$/, '');
|
}
|
// if (!current_hash) {
|
// if (current_hash != $.History._currentHash) {
|
// $.History._currentHash = current_hash;
|
// //TODO
|
// }
|
// } else {
|
if (current_hash != $.History._currentHash) {
|
$.History._currentHash = current_hash;
|
$.History.loadHistory(current_hash);
|
}
|
// }
|
|
},
|
addHistory: function(hash, fun, args){
|
$.History._currentHash = hash;
|
var history = [hash, fun, args];
|
$.History._hash.push(history);
|
if ($.browser.msie) {
|
var ihistory = $("#jQuery_history")[0];
|
var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
|
iframe.open();
|
iframe.close();
|
iframe.location.hash = hash.replace(/\?.*$/, '');
|
location.hash = hash.replace(/\?.*$/, '');
|
} else {
|
location.hash = hash.replace(/\?.*$/, '');
|
}
|
},
|
loadHistory: function(hash){
|
if ($.browser.msie) {
|
location.hash = hash;
|
}
|
for (var i = 0; i < $.History._hash.length; i += 1) {
|
if ($.History._hash[i][0] == hash) {
|
$.History._hash[i][1]($.History._hash[i][2]);
|
return;
|
}
|
}
|
}
|
}
|
});
|
})(jQuery);
|