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

📄 whatwgstorageprovider.js

📁 这是一个ajax的例子大家好好的看看就是一个鱼眼的效果
💻 JS
字号:
if(!dojo._hasResource["dojox.storage.WhatWGStorageProvider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.storage.WhatWGStorageProvider"] = true;dojo.provide("dojox.storage.WhatWGStorageProvider");dojo.require("dojox.storage.Provider");dojo.require("dojox.storage.manager");dojo.declare("dojox.storage.WhatWGStorageProvider", [ dojox.storage.Provider ], {	// summary:	//		Storage provider that uses WHAT Working Group features in Firefox 2 	//		to achieve permanent storage.	// description: 	//		The WHAT WG storage API is documented at 	//		http://www.whatwg.org/specs/web-apps/current-work/#scs-client-side	//	//		You can disable this storage provider with the following djConfig	//		variable:	//		var djConfig = { disableWhatWGStorage: true };	//			//		Authors of this storage provider-		//			JB Boisseau, jb.boisseau@eutech-ssii.com	//			Brad Neuberg, bkn3@columbia.edu 	initialized: false,		_domain: null,	_available: null,	_statusHandler: null,	_allNamespaces: null,	_storageEventListener: null,		initialize: function(){		if(dojo.config["disableWhatWGStorage"] == true){			return;		}				// get current domain		// see: https://bugzilla.mozilla.org/show_bug.cgi?id=357323		this._domain = (location.hostname == "localhost") ? "localhost.localdomain" : location.hostname;		// console.debug(this._domain);				// indicate that this storage provider is now loaded		this.initialized = true;		dojox.storage.manager.loaded();		},		isAvailable: function(){		try{			// see: https://bugzilla.mozilla.org/show_bug.cgi?id=357323			var myStorage = globalStorage[((location.hostname == "localhost") ? "localhost.localdomain" : location.hostname)];		}catch(e){			this._available = false;			return this._available;		}				this._available = true;			return this._available;	},	put: function(key, value, resultsHandler, namespace){		if(this.isValidKey(key) == false){			throw new Error("Invalid key given: " + key);		}		namespace = namespace||this.DEFAULT_NAMESPACE;				// get our full key name, which is namespace + key		key = this.getFullKey(key, namespace);					this._statusHandler = resultsHandler;				// serialize the value;		// handle strings differently so they have better performance		if(dojo.isString(value)){			value = "string:" + value;		}else{			value = dojo.toJson(value);		}				// register for successful storage events.		var storageListener = dojo.hitch(this, function(evt){			// remove any old storage event listener we might have added			// to the window on old put() requests; Firefox has a bug			// where it can occassionaly go into infinite loops calling			// our storage event listener over and over -- this is a 			// workaround			// FIXME: Simplify this into a test case and submit it			// to Firefox			window.removeEventListener("storage", storageListener, false);						// indicate we succeeded			if(resultsHandler){				resultsHandler.call(null, this.SUCCESS, key);			}		});				window.addEventListener("storage", storageListener, false);				// try to store the value			try{			var myStorage = globalStorage[this._domain];			myStorage.setItem(key, value);		}catch(e){			// indicate we failed			this._statusHandler.call(null, this.FAILED, key, e.toString());		}	},	get: function(key, namespace){		if(this.isValidKey(key) == false){			throw new Error("Invalid key given: " + key);		}		namespace = namespace||this.DEFAULT_NAMESPACE;				// get our full key name, which is namespace + key		key = this.getFullKey(key, namespace);				// sometimes, even if a key doesn't exist, Firefox		// will return a blank string instead of a null --		// this _might_ be due to having underscores in the		// keyname, but I am not sure.				// FIXME: Simplify this bug into a testcase and		// submit it to Firefox		var myStorage = globalStorage[this._domain];		var results = myStorage.getItem(key);				if(results == null || results == ""){			return null;		}				results = results.value;				// destringify the content back into a 		// real JavaScript object;		// handle strings differently so they have better performance		if(dojo.isString(results) && (/^string:/.test(results))){			results = results.substring("string:".length);		}else{			results = dojo.fromJson(results);		}				return results;	},		getNamespaces: function(){		var results = [ this.DEFAULT_NAMESPACE ];				// simply enumerate through our array and save any string		// that starts with __		var found = {};		var myStorage = globalStorage[this._domain];		var tester = /^__([^_]*)_/;		for(var i = 0; i < myStorage.length; i++){			var currentKey = myStorage.key(i);			if(tester.test(currentKey) == true){				var currentNS = currentKey.match(tester)[1];				// have we seen this namespace before?				if(typeof found[currentNS] == "undefined"){					found[currentNS] = true;					results.push(currentNS);				}			}		}				return results;	},	getKeys: function(namespace){		namespace = namespace||this.DEFAULT_NAMESPACE;				if(this.isValidKey(namespace) == false){			throw new Error("Invalid namespace given: " + namespace);		}				// create a regular expression to test the beginning		// of our key names to see if they match our namespace;		// if it is the default namespace then test for the presence		// of no namespace for compatibility with older versions		// of dojox.storage		var namespaceTester;		if(namespace == this.DEFAULT_NAMESPACE){			namespaceTester = new RegExp("^([^_]{2}.*)$");			}else{			namespaceTester = new RegExp("^__" + namespace + "_(.*)$");		}				var myStorage = globalStorage[this._domain];		var keysArray = [];		for(var i = 0; i < myStorage.length; i++){			var currentKey = myStorage.key(i);			if(namespaceTester.test(currentKey) == true){				// strip off the namespace portion				currentKey = currentKey.match(namespaceTester)[1];				keysArray.push(currentKey);			}		}				return keysArray;	},	clear: function(namespace){		namespace = namespace||this.DEFAULT_NAMESPACE;				if(this.isValidKey(namespace) == false){			throw new Error("Invalid namespace given: " + namespace);		}				// create a regular expression to test the beginning		// of our key names to see if they match our namespace;		// if it is the default namespace then test for the presence		// of no namespace for compatibility with older versions		// of dojox.storage		var namespaceTester;		if(namespace == this.DEFAULT_NAMESPACE){			namespaceTester = new RegExp("^[^_]{2}");			}else{			namespaceTester = new RegExp("^__" + namespace + "_");		}				var myStorage = globalStorage[this._domain];		var keys = [];		for(var i = 0; i < myStorage.length; i++){			if(namespaceTester.test(myStorage.key(i)) == true){				keys[keys.length] = myStorage.key(i);			}		}				dojo.forEach(keys, dojo.hitch(myStorage, "removeItem"));	},		remove: function(key, namespace){		// get our full key name, which is namespace + key		key = this.getFullKey(key, namespace);				var myStorage = globalStorage[this._domain];		myStorage.removeItem(key);	},		isPermanent: function(){		return true;	},	getMaximumSize: function(){		return this.SIZE_NO_LIMIT;	},	hasSettingsUI: function(){		return false;	},		showSettingsUI: function(){		throw new Error(this.declaredClass + " does not support a storage settings user-interface");	},		hideSettingsUI: function(){		throw new Error(this.declaredClass + " does not support a storage settings user-interface");	},		getFullKey: function(key, namespace){		namespace = namespace||this.DEFAULT_NAMESPACE;				if(this.isValidKey(namespace) == false){			throw new Error("Invalid namespace given: " + namespace);		}				// don't append a namespace string for the default namespace,		// for compatibility with older versions of dojox.storage		if(namespace == this.DEFAULT_NAMESPACE){			return key;		}else{			return "__" + namespace + "_" + key;		}	}});dojox.storage.manager.register("dojox.storage.WhatWGStorageProvider", 								new dojox.storage.WhatWGStorageProvider());}

⌨️ 快捷键说明

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