uhweb.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /**
  2. *UHWEB JS
  3. */
  4. (function (w, d, undefined) {
  5. /*
  6. *生成全局遮罩层
  7. */
  8. //document.writeln('<div id="div_Mask" style="width:100%;position:absolute; z-index:99999; top:0; left:0; background:#E6E6E6; height:' + 0/*document.documentElement.clientHeight*/ + 'px;"><div style="z-index:99999;font-size:12px;color: #ce8f22;position:absolute;top:0px;right:0px;padding:2px 10px 2px 10px;">' +
  9. // '加载中,请稍候......</div></div>');
  10. //document.close();
  11. /**
  12. * 定义全局作用域变量UHWEB
  13. */
  14. w.UHWEB = (function (w, d, undefined) {
  15. /**
  16. *是否是IE浏览器
  17. */
  18. var isIE = (navigator.userAgent.toLowerCase().indexOf('msie') != -1),
  19. /**
  20. * 创建UHWEB对象的临时变量
  21. */
  22. U,
  23. /**
  24. * 缓存document.getElementsByTagName
  25. */
  26. queryTag = function (tag) {
  27. return this.getElementsByTagName(tag);
  28. },
  29. /**
  30. * 缓存document.createElement
  31. */
  32. createEl = function (tag) {
  33. return this.createElement(tag);
  34. },
  35. /**
  36. * 是否是服务器模式,uhweb可在静态环境和服务器环境运行
  37. */
  38. isServer = !(d.domain == ''),
  39. /**
  40. * 业务js,就是定义在uhweb.js的script节点上的bizjs属性
  41. */
  42. bizJs,
  43. /**
  44. *业务css,就是定义在uhweb.js的script节点上的bizcss属性
  45. */
  46. bizCss,
  47. /**
  48. * 是否是客户端缓存服务端
  49. */
  50. clientCache,
  51. isLoginPage = "false",
  52. /*
  53. * 调试模式,静态模式或者服务器模式下在url后拼接uhweb-debug=true即可开启调试模式.
  54. * 要查看调试信息,请开启浏览器控制台
  55. */
  56. _DEBUG = false;
  57. if (!isServer || w.location.search.indexOf('uhweb-debug=true') > 0) {
  58. _DEBUG = true;
  59. }
  60. /**
  61. * 获取uhweb所在的根目录
  62. * @return {String}
  63. */
  64. var getRoot = function () {
  65. var s = queryTag.call(d, 'script'),
  66. /**
  67. * 某些情况时需要添加例外
  68. */
  69. id = 0;
  70. var p = s[id].src, sign = "uhweb.js", realpath = "uhweb/uhweb.js";
  71. if (p.lastIndexOf(sign) > 0) {
  72. bizJs = s[id].getAttribute('bizjs');
  73. isLoginPage = s[id].getAttribute('isLoginPage');
  74. bizCss = s[id].getAttribute('bizcss');
  75. clientCache = s[id].getAttribute('CacheServer');
  76. return p.replace(realpath, '');
  77. } else {
  78. throw '引入的uhweb.js的script节点必须放在页面引用的第一个script节点上!';
  79. }
  80. };
  81. var head = queryTag.call(d, 'HEAD').item(0),
  82. //静态运行时加载js
  83. local = function (url, func) {
  84. var s = createEl.call(d, 'script');
  85. s.language = 'javascript';
  86. s.type = 'text/javascript';
  87. s.async = false;
  88. s['src'] = url;
  89. s.onload = s.onreadystatechange = function () {
  90. var st = this.readyState;
  91. if (!st || st == 'loaded' || st == 'complete') {
  92. _U.log('finishLoad js file ' + url);
  93. s.onload = s.onreadystatechange = null;
  94. if (func) {
  95. func.delay(10);
  96. }
  97. }
  98. };
  99. head.appendChild(s);
  100. return s;
  101. },
  102. //服务器模式时加载js
  103. server = function (url, func) {
  104. var req = ((w.ActiveXObject) ? new ActiveXObject('MsXml2.XmlHttp') : new XMLHttpRequest());
  105. req.open('get', url, false);
  106. req.setRequestHeader('Content-Type', 'text/plain;charset=gb2312');
  107. req.send(null);
  108. if (req.readyState == 4) {
  109. if (req.status == 200) {
  110. if (req.responseText != '') {
  111. if (isIE) {
  112. execScript(req.responseText);
  113. } else {
  114. w.eval(req.responseText);
  115. }
  116. if (func)func();
  117. }
  118. }
  119. }
  120. };
  121. U = {
  122. //版本号
  123. ver: 'V1.0',
  124. //全局根目录
  125. root: getRoot(),
  126. isLoginPage : isLoginPage,
  127. //是否是开发模式
  128. isDev: (typeof jQuery === 'undefined'),
  129. //是否是服务器端运行
  130. isServer: isServer,
  131. //调试开关
  132. debug: _DEBUG,
  133. //加载js
  134. loadJs: function (url, f) {
  135. (isServer) ? server(url, f) : local(url, f);
  136. },
  137. //加载css
  138. loadCss: function (url) {
  139. var link = createEl.call(d, 'link');
  140. link.href = url;
  141. link.type = 'text/css';
  142. link.rel = 'stylesheet';
  143. head.appendChild(link);
  144. },
  145. //初始化配置文件
  146. initCfg: function (cfg) {
  147. var me = this;
  148. me.config = cfg;
  149. if (me.process) {
  150. me.process();
  151. } else {
  152. _U.loadCss('../uhweb/styles/' + _U.getCfg('style').sys_style + '/uhweb_min.css');
  153. }
  154. //加载业务js文件
  155. var bizjs = (bizJs) ? eval(bizJs) : [], url, bizcss = (bizCss) ? eval(bizCss) : [];
  156. for (i = 0; i < bizjs.length; i++) {
  157. url = me.root + bizjs[i];
  158. _U.log('add bizjs ' + url, 'uhweb');
  159. me.loadJs(url);
  160. }
  161. for (i = 0; i < bizcss.length; i++) {
  162. url = me.root + bizcss[i];
  163. _U.log('add bizcss ' + url, 'uhweb');
  164. me.loadCss(url);
  165. }
  166. },
  167. //获取配置信息
  168. getCfg: function (name) {
  169. return this.config[name];
  170. }
  171. };
  172. //实现默认的浅拷贝
  173. U.mix = function (o) {
  174. var me = this;
  175. for (var k in o) {
  176. if (me[k]) {
  177. me.warn('UHWEB对象已经有属性[' + k + ']!', 'uhweb');
  178. } else {
  179. me[k] = o[k];
  180. }
  181. }
  182. };
  183. U.getParamFromUrl = function (param) {
  184. var query = window.location.search;
  185. var v = query.match(new RegExp("(^|&)" + param + "=([^&]*)(&|$)", "i"));
  186. if (v != null) {
  187. v = unescape(v[2]);
  188. }
  189. return v;
  190. };
  191. //全局屏蔽一些按键
  192. U.shielding = function () {
  193. var s = _U.getCfg('shields');
  194. $(window).addEvent((Browser.firefox) ? 'keypress' : 'keydown', function (e) {
  195. var k = e.key, c = e.control, el = $(e.target);
  196. if ((k == 'f5' || (c && k == 'r')) && s.f5) {
  197. e.stop();
  198. return false;
  199. } else if (k == 'backspace' && s.backspace) {
  200. var type = el.get('type') || el.get('tag');
  201. if (!['button', 'text', 'password', 'textarea', 'submit'].contains(type)) {
  202. e.stop();
  203. return false;
  204. }
  205. }
  206. });
  207. if (s.contextMenu) {
  208. $(document).oncontextmenu = function (e) {
  209. return false;
  210. }
  211. }
  212. };
  213. //统一处理iframe的初始化以及跳转
  214. //解决按下backspace或者浏览器回退键会使iframe变为空白的问题
  215. U.setIfrSrc = function (ifr, src) {
  216. ifr.src = src;
  217. ifr.contentWindow.location.replace(src);
  218. /*//要注意跨域的问题.可能无跨域问题
  219. Function.attempt(function () {
  220. }, function () {
  221. })*/
  222. };
  223. return U;
  224. })(w, d, undefined);
  225. /**
  226. * 新增一个别名,减少字符开销
  227. */
  228. var _U = w._U = w.Uhweb = w.UHWEB,
  229. /**
  230. *日志输出级别,为兼容,暂支持4种级别
  231. */
  232. mtd = ['log', 'warn', 'error', 'info'];
  233. /**
  234. * 隐藏蒙版,框架启动加载完毕之后会调用
  235. */
  236. for (var k = 0; k < mtd.length; k++) {
  237. _U[mtd[k]] = (function (c) {
  238. return function (msg, src) {
  239. U_LOG(msg, c, src);
  240. }
  241. })(mtd[k]);
  242. }
  243. /**
  244. * 日志输出
  245. * @param msg 要输出的信息
  246. * @param cat 级别
  247. * @param src 信息来源
  248. */
  249. function U_LOG(msg, cat, src) {
  250. if (_U.debug) {
  251. msg = ((src) ? src : 'SYSTEM') + ': ' + msg;
  252. if (w['console'] !== undefined && console.log) {
  253. console[cat && console[cat] ? cat : 'log'](msg);
  254. }
  255. }
  256. }
  257. _U.process = function () {
  258. };
  259. //加载子界面.
  260. _U.initSubPage = function (ns, func) {
  261. $.fn[ns] = {};
  262. func($, $.fn[ns], _U);
  263. };
  264. })(window, document, undefined);