loader.min.js 3.99 KB
(function() {
	// 加载数据
	var goInit = function() {
		if (window.isGetData == 1) {
			Core.init();
		} else {
			window.isGetData = 1;
		}
	}
	var getData = function(url) {
		var params = location.hash.slice(1);
		var args = params.match(/app_id=(\w*)&?/);
		var start_page = params.match(/mod=(\w*)&?/);
		var core_server = params.match(/core_server=(.*)&?/);
		var appId = '';

		var skin_v = '?' + $('#skin').attr('data-v');
		if (args && args.length == 2) {
			//匹配出app_id
			appId = args[1];
		}
		if(start_page && start_page.length == 2){
			//匹配出启动模块
			Core.start_page = start_page[1];
			console.log(Core.start_page);
		}
		if (core_server){
			Core.server = core_server[1]
		}
		location.hash = '';
		if (appId == '') {
			//刷新地址出错
			params = localStorage.getItem('params_' + url);
			appId = localStorage.getItem('app_id');
		} else {
			localStorage.setItem('params_' + url, params);
			localStorage.setItem('app_id', appId);
		}

		Core.params = params;
		if (!appId) {
			//无法获取到app_id
			Core.showTips('无法获取app_id!', false, 3000);
			goInit();
			$('#loading').hide();
			return;
		}
		Core.Data.app_id = appId;
		var setSkin = false;
		//先尝试设置皮肤,检查是否自动登录
		var tryAutoLogin = false;
		var _skin = localStorage.getItem('skin_' + appId);
		if (_skin) {
			$('#skin').attr('href', Core.server + '/static/sdk/skin/' + _skin + '/skin.css' + skin_v);
			setSkin = true;
		}
		if ($('#login').length != 0) {
			var auto = localStorage.getItem('auto');
			var auto_time = parseInt(localStorage.getItem('auto_time'));
			var d = new Date().getTime();
			if (auto == 'true' && (d - auto_time) < 600000) {
				tryAutoLogin = false;
			} else if (auto == null) {
				tryAutoLogin = false;
			} else {
				tryAutoLogin = true;
			}
		}
		//如果不尝试自动登录,直接初始化界面
		if (!tryAutoLogin)
			goInit();

		Core.ajax({
			type: 'GET',
			url: url + '?' + params,
			dataType: 'json',
			success: function(data) {
				if (data.code == 0) {
					// 成功请求
					Core.Data = data.msg;
					if (Core.Data.face) {
						Core.Data.face = Core.server + data.msg.face;
					}
					//更新server
					var lastServer = localStorage.getItem('last_server');
					if (Core.Data.new_server) {
						if (lastServer && lastServer == Core.Data.new_server) {
							//没有变化
						} else {
							//需要更新server
							var s = 'sdk://changeServer?addr=' + Core.Data.new_server;
							localStorage.setItem('last_server', Core.Data.new_server);
							location.href = s;
						}
					}
					
					if (!setSkin && data.skin) {
						$('#skin').attr('href', Core.server + '/static/sdk/skin/' + data.skin + '/skin.css' + skin_v);
						localStorage.setItem('skin_' + appId, data.skin);
					}
					localStorage.setItem('data_' + url, JSON.stringify(data.msg));
					
					//模块初始化函数,兼容旧版本sdk
					if (typeof(window.initFunc) == "function") {
						window.initFunc();
					}
					// 核心初始化
					$('#loading').hide();
					if (tryAutoLogin) {
						goInit();
					} else {
						var first_mod = Core.start_page? Core.start_page: 'home';
						Core.updateMod(first_mod);
					}
				} else {
					//参数出错,没有游戏服什么的.
					$('#loading').hide();
					$('<h2 class="error_title">出错了,正在努力抢修中...</h2>').appendTo($('.mask'));
					Core.showTips(data.msg, false, 6000);
					// 核心初始化
					Core.loadFinished();
				}

			},
			error: function(xhr, type) {
				// 请求失败,服务器崩溃
				//尝试从缓存中获取数据
				var data_str = localStorage.getItem('data_' + url);
				if (data_str && data_str != '') {
					var data = JSON.parse(data_str);
					if (typeof data == "object") {
						Core.Data = data;
						if (tryAutoLogin) {
							goInit();
						} else {
							Core.updateMod('home');
						}
					}
				}
				Core.showTips('网络出错,请检查网络状态。', false);
				// 核心初始化
				$('#loading').hide();
			}

		});
	}
	window.getData = getData;
})();