U.CD.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /*
  2. 此处为1473跨域文件夹 利用此文件函数实现1473跨域
  3. */
  4. Namespace.register("U.CD");
  5. //#region 跨域1473文件加载
  6. //#region 跨域变量区域
  7. //引入www.1473.cn的时候,需要图形界面,即引用ufromd.js的时候,要把首页全部下载下来。
  8. //完全跨域的全局变量。例如a.com引入b.com,需要此文件
  9. U.CD.dom = "/domain.htm"; //外域引入1473跨域文件
  10. //引入www.1473.cn的时候,需要图形界面,即引用ufromd.js的时候,要把首页全部下载下来。
  11. //引入www.1473.cn的时候,%.14573.cn引入www.1473.cn的时候,需要使用到下面配置
  12. //二级跨域的全局变量,暂时没有用
  13. U.CD.cdom = "/Crossdomain.htm"; //跨域获取1473桌面文件
  14. U.CD.Len = 1; //主加载域名长度
  15. U.CD.ST = ["U_Main"]; //主加载域
  16. //跨域1473获取的变量
  17. U.CD.UTF = [{ "U_Main": "MA" }, { "U_Disk": "Adisk" }, { "U_BG": "UB" }, { "U_PB": "PB" }, { "U_Pay": "PY" }, { "U_ME": "MA" }, { "reply": "RY"}]; //ajax对应变量
  18. //所有跨域以前是指向crossdomain.htm 现在指向了index.htm。
  19. U.CD.UKE = [
  20. ["U_Main", "http://main.1473.cn/Crossdomain.htm", "A"], //主域名跨域地址
  21. //["U_Pay", "http://pay.1473.cn/Crossdomain.htm", "PY"], //交易系统
  22. //["U_Office", "http://office.1473.cn/Crossdomain.htm", "Of"]
  23. ];
  24. //#endregion
  25. //#region 跨域解决方案
  26. /**
  27. * 加载跨域文件 异步加载iframe跨域请求1473项目加载请求
  28. * @param {array} 跨域集
  29. ----------[["iframename", "iframeurl", "ajaxname"]]
  30. ----------[iframename] iframename iframe对应的name
  31. ----------[iframeurl] iframeurl iframe加载的url
  32. ----------[ajaxname] ajaxname //原u.a替换的命名
  33. * @param {function} 加载成功回调函数
  34. * @param {element} 用户使用U.A.Request时需要时间,则做loading效果
  35. */
  36. U.CD.LIFA = function (_ajaxArr, _cb, _el) {
  37. //UBE = UBE || []; //传参默认值
  38. var _bool, _iframeId, i;
  39. // i = UBE.length,_UKE
  40. _ajaxName = U.CD.UTF; //ajax跨域加载域名对应
  41. _crossObj = U.CD.UKE; //添加用户合一 需要跨域的obj对象
  42. _objLength = _crossObj.length;
  43. _frag = $$("frag");
  44. U.CD.Len = _crossObj.length; //变量
  45. //for (j = 0; j < i; j++) { U.CD.ST.push(UBE[j][0]); } //添加预加载处理方式
  46. if (document.domain.indexOf("1473.cn") > -1) { //1473非跨域形式
  47. //while (i--) { //设置外跨域文件
  48. //_UKE = {};
  49. //_UKE[UBE[i][0]] = UBE[i][2];
  50. //_UCE = [_UKE].concat(_UCE);
  51. //}
  52. for (i = 0; i < _objLength; i++) { //创建跨域
  53. try {
  54. //得到形如"U_Main"的iframe的id或者名字
  55. _iframeId = _crossObj[i][0];
  56. //如果iframe已经存在,表示已经加载了跨域iframe,该跨域已经加载处理
  57. if (window[_iframeId] && window[_iframeId].location) { //判断跨域是否已经加载
  58. //如果iframe没有加载完,则找不到location.href。
  59. if (window[_iframeId].location.href == _crossObj[i][1]) {
  60. if (U.CD.AsynLIFA.apply($("#" + _iframeId)[0], [_ajaxName[i], _cb, []])) { //设置域名加载成功函数
  61. return;
  62. };
  63. break;
  64. } else { //移除加载
  65. $("#" + _iframeId).remove();
  66. }
  67. }
  68. //创建跨域iframe的函数。
  69. //跨域未加载处理
  70. _bool = true;
  71. _UIFR = $$("iframe", { "id": _iframeId, "name": _iframeId, "width": 0, "height": 0, "style": { "display": "none" }, "src": _crossObj[i][1] }, _frag);
  72. //跨域回调设置
  73. U.MD.IframeLoad(_UIFR, [
  74. [U.CD.AsynLIFA, [_ajaxName[i], _cb, U.CD.ST]]
  75. ]);
  76. } catch (e) {
  77. return;
  78. }
  79. }
  80. } else { //1473跨域形式
  81. if (window["U_Domain"]) {
  82. if (window["U_Domain"].location.href == U.CD.dom) {
  83. U.CD.AsynDomain(_cb);
  84. return;
  85. }
  86. } //跨域已经加载成功
  87. else {
  88. U.CD.Introduce(_cb); //初始化1473
  89. }
  90. }
  91. //跨域加载需要时间,可以传递一个loading图标。
  92. if (_el && _bool) {
  93. U.MD.loading(_el[0] || _el, _el[1]); //设置loading加载
  94. }
  95. ($("#usestudio-server")[0] || $("body")[0]).appendChild(_frag); //添加到页面
  96. }
  97. /**
  98. * iframe加载成功后,异步加载跨域
  99. *
  100. * @param {object} 当前跨域集
  101. * @param {function} 成功回调
  102. * @param {array} 所有的跨域集
  103. * @return {boolean} 是否已经成功过回调
  104. */
  105. U.CD.AsynLIFA = function (iframe, _cb, _crossArr) { //加载跨域文件
  106. var i, j, _iframe = this.contentWindow;
  107. _iframe.name = this.id; //设置当前iframe name
  108. U.CD["Len"]--; //总加载-1
  109. try {
  110. for (i in iframe) {
  111. //window.U[iframe[i]] = _iframe.U.A; //设置此域U.A的别称,让他们指向一致。
  112. //加载成功后,则删除跨域变量。
  113. j = _crossArr.indexOf(i);
  114. if (j > -1) { _crossArr.splice(j, 1) }
  115. }
  116. } catch (e) { } //加载Iframe
  117. if (!_crossArr.length) { //判断是否已经加载成功过
  118. _crossArr.push(false);
  119. if (_cb) {
  120. (_cb()); //回调函数
  121. }
  122. return true;
  123. }
  124. }
  125. /**
  126. * 非1473引入1473...
  127. *
  128. * @param {function} 加载回调
  129. * @param {element} loading元素
  130. */
  131. U.CD.Introduce = function (_cb, _el) {
  132. var _el = $$("iframe", {
  133. "id": "U_Domain",
  134. "name": "U_Domain",
  135. "width": 0,
  136. "height": 0,
  137. "style": { "display": "none" },
  138. "src": U.CD.dom
  139. });
  140. U.MD.IframeLoad(_el, $("#usestudio-server")[0] || $("body")[0]), [
  141. [U.CD.AsynDomain, [_cb]]
  142. ]; //初始化1473
  143. if (_el) {
  144. U.MD.loading(_el[0] || _el, _el[1]); //加载1473loading
  145. }
  146. // (UDOD) && (U.MD.loading(UDOD[0] || UDOD, UDOD[1])); //加载1473loading
  147. }
  148. /**
  149. * 非1473加载跨域回调
  150. *
  151. * @param {element} 元素加载的位置
  152. */
  153. U.CD.AsynDomain = function (_cb) {
  154. (U.Ut.isFunction(_cb)) && (_cb());
  155. }
  156. //针对图形界面。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  157. /**
  158. * 跨域引用1473。。。。。。。。。。。。。。,示例在c.147.cn和d.1473.cn。
  159. *
  160. * @param {element} 加载1473时给其他网站的loanding元素
  161. * @param {function} 加载1473成功的回调函数
  162. * @param {bool} 是否加载1473桌面,如果不是,则只加载窗体。任务管理系统需要我们的桌面
  163. */
  164. U.CD.GQB = function (loading, _cb, _bool) {
  165. if (!$("#usestudio-server")[0]) {
  166. var _el = $$("div", { id: "usestudio-server", className: "usestudio-server", "__top__": "false" }, document.body); //生成跨域加载
  167. //1473域加载1473平台
  168. if (document.domain == "1473.cn") {
  169. _el = $$("iframe", { "width": 0, "height": 0, "style": { "display": "none" }, "src": "/index8.aspx" }, $("body")[0]); //获取1473主站点
  170. window.onload = null;
  171. U.MD.IframeLoad(_el, [
  172. [U.CD.AsynGQB, [_el, loading, _cb, _bool]]
  173. ]); //加载1473内容
  174. }
  175. //非1473加载
  176. else { U.CD.CGQB(_cb, _bool); }
  177. }
  178. }
  179. /*
  180. * 加载1473整体
  181. *
  182. * @param {element} 当前加载的iframe
  183. * @param {element} 需要loading的元素
  184. * @param {element} 加载的位置
  185. * @param {bool} 是否加载1473桌面,如果不是,则只加载窗体。任务管理系统需要我们的桌面
  186. */
  187. U.CD.AsynGQB = function (iframe, loading, cb, b) {
  188. var i, _document, _html;
  189. //_UNE = undefined,
  190. //_UTF = U.Ut.isString(UDOD), //判断位置是否为元素
  191. var _windows = iframe.contentWindow; //1473cookie是
  192. document.wincookie = iframe.contentWindow.document.cookie; //document.wincookie 自己做一个全局变量,记录1473的cookie.
  193. var _content = $("#usestudio-server")[0]; //获取加载的位置
  194. //if (_UTF) {
  195. // UDOD = $($$("div", { "innerHTML": UDOD })).Child()[0];
  196. // _UST = UDOD.innerHTML;
  197. //}
  198. //else {
  199. _html = $(b === true ? "body" : "#UD_SY", _windows.document)[0].innerHTML;
  200. //}
  201. //if (!_UTF) {
  202. try {
  203. _document = _windows.document.open();
  204. }
  205. catch (e) {
  206. _document = _windows.document;
  207. }
  208. _document.write = "";
  209. _document.close();
  210. $(iframe).remove()
  211. //}
  212. _content.innerHTML = _html; //添加值
  213. if (U.D.Load) { U.D.Load(cb) }
  214. else if (cb) { cb(); } //调用1473预加载
  215. }