umeruma
11/28/2012 - 12:32 PM

application cache loading js

application cache loading js

(function (app) {
	var loading_class = 'loading';
	var html = document.documentElement;
	loading_class = ' ' + loading_class + ' ';

	//未サポート
	if (!app || app.UNCACHED === app.status) {
		init();
		return;
	}

	//初期読み込み
	if (!localStorage.appcaching) {
		localStorage.appcaching = 1;
		init();
		return;
	}

	//キャッシュが古くなっている
	if (app.status === app.UPDATEREADY) {
		location.reload();
		return;
	}
	//更新不要
	if (app.status === app.IDLE || app.status === app.OBSOLETE) {
		init();
		return;
	}

	//ローディング開始
	html.className += loading_class;

	//更新不要
	app.addEventListener('cached', start);
	//更新なし
	app.addEventListener('noupdate', start);
	//更新不可
	app.addEventListener('obsolete', start);
	//キャッシュが古くなっている
	app.addEventListener('updateready', function () {
		location.reload();
	});
	//更新不可
	app.addEventListener('error', start);
	//timeout
	var timeout = setTimeout(start, 3000);

	function start () {
		if (start.fire) {
			return;
		}
		clearTimeout(timeout);
		start.fire = 1;
		html.className = html.className.replace(loading_class, '');
		init();
	}
	function init () {
		alert('load done.');
	}
})(window.applicationCache);