openinstall2.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. OpenInstall = function(e, n, t) {
  2. function r(n) {
  3. n = n || e.location.href;
  4. for (var t = n.indexOf("?"), r = -1 == t ? "" : n.substring(t + 1).replace(/\+/g, "%20"), i = r.split("&"), o = {}, a = 0; a < i.length; a++) {
  5. var c = i[a].split("=")
  6. , u = decodeURIComponent(c[0] || "")
  7. , l = decodeURIComponent(c[1] || "");
  8. u && l && (void 0 === o[u] ? o[u] = l : "object" == typeof o[u] ? o[u].push(l) : o[u] = [o[u], l])
  9. }
  10. return o
  11. }
  12. function i(e) {
  13. var n = [];
  14. for (var t in e) {
  15. var r = e[t];
  16. if ("[object Array]" == Object.prototype.toString.call(r))
  17. for (var i = 0; i < r.length; i++)
  18. null != r[i] && void 0 !== r[i] && n.push(encodeURIComponent(t) + "=" + encodeURIComponent(r[i]));
  19. else
  20. null != r && void 0 !== r && n.push(encodeURIComponent(t) + "=" + encodeURIComponent(r))
  21. }
  22. return n.join("&")
  23. }
  24. function o() {
  25. var e = 0
  26. , n = arguments.length
  27. , t = arguments[e]
  28. , o = t.indexOf("?")
  29. , a = r(t);
  30. for (e = 1; e < n; e++) {
  31. var c = arguments[e];
  32. for (var u in c)
  33. a[u] = c[u]
  34. }
  35. return (-1 == o ? t : t.substring(0, o)) + "?" + i(a)
  36. }
  37. function a() {
  38. this.arr = [],
  39. this.run = function(e) {
  40. this.arr ? this.arr[this.arr.length] = e : e()
  41. }
  42. ,
  43. this.isReady = function() {
  44. return null == this.arr
  45. }
  46. ,
  47. this.ready = function() {
  48. if (null != this.arr)
  49. for (var e = 0; e < this.arr.length; e++)
  50. this.arr[e]();
  51. this.arr = null
  52. }
  53. }
  54. function c(e) {
  55. var n = new t
  56. , r = e.data
  57. , i = e.url
  58. , o = e.method;
  59. r && "string" != typeof r && (r = A.stringify(r)),
  60. "POST" != o && r && (i = i + (i.indexOf("?") > -1 ? "&" : "?") + r,
  61. r = null),
  62. n.onreadystatechange = function() {
  63. if (4 == n.readyState) {
  64. if (200 == n.status) {
  65. var t = n.response || n.responseText || {};
  66. e.success && e.success("string" == typeof t ? A.parse(t) : t)
  67. } else
  68. e.error && e.error(n, n.statusText);
  69. e.complete && e.complete(n)
  70. }
  71. }
  72. ,
  73. n.ontimeout = function() {
  74. e.error && e.error(n, n.statusText)
  75. }
  76. ;
  77. try {
  78. n.open(o, i, !1 !== e.async),
  79. n.withCredentials = !0;
  80. try {
  81. n.setRequestHeader && e.contentType && n.setRequestHeader("Content-Type", e.contentType),
  82. e.timeout && (n.timeout = e.timeout)
  83. } catch (e) {}
  84. n.send(r || null)
  85. } catch (e) {}
  86. return n
  87. }
  88. function u() {
  89. var e = n.createElement("canvas");
  90. if (e && "function" == typeof e.getContext)
  91. for (var t = ["webgl", "webgl2", "experimental-webgl2", "experimental-webgl"], r = 0; r < t.length; r++) {
  92. var i = t[r]
  93. , o = e.getContext(i);
  94. if (o) {
  95. var a = {};
  96. a.context = i,
  97. a.version = o.getParameter(o.VERSION),
  98. a.vendor = o.getParameter(o.VENDOR),
  99. a.sl_version = o.getParameter(o.SHADING_LANGUAGE_VERSION),
  100. a.max_texture_size = o.getParameter(o.MAX_TEXTURE_SIZE);
  101. var c = o.getExtension("WEBGL_debug_renderer_info");
  102. return c && (a.vendor = o.getParameter(c.UNMASKED_VENDOR_WEBGL),
  103. a.renderer = o.getParameter(c.UNMASKED_RENDERER_WEBGL)),
  104. a
  105. }
  106. }
  107. return {}
  108. }
  109. function l(n) {
  110. R(function(t) {
  111. var r, i, o, a;
  112. try {
  113. r = e.screen.width || "",
  114. i = e.screen.height || "",
  115. o = e.devicePixelRatio || "",
  116. a = u()
  117. } catch (e) {}
  118. for (var c = 0, t = t || [], l = t.length; c < l; c++)
  119. t[c] = C(t[c] || "");
  120. n({
  121. sw: C("" + (r || 0)),
  122. sh: C("" + (i || 0)),
  123. sp: o,
  124. gv: C(a.version || ""),
  125. gr: C(a.renderer || ""),
  126. li: t
  127. })
  128. })
  129. }
  130. function s(t, r, i) {
  131. var o = "ex"
  132. , a = "ecC"
  133. , c = "ommand"
  134. , u = "co"
  135. , l = "py"
  136. , s = o + a + c
  137. , d = u + l;
  138. if ("function" != typeof n[s])
  139. return !1;
  140. var f = n.createElement("div");
  141. f.innerHTML = t;
  142. for (var p = [], h = 0; h < f.children.length; h++)
  143. p[h] = f.children[h];
  144. for (var v, g, m = !1, b = r ? r + ((new Date).getTime() + (i || 1)) + "-" : null, h = 0; h < p.length; h++) {
  145. try {
  146. if (v = p[h],
  147. y && (v.style.position = "absolute",
  148. v.style.top = "-100px"),
  149. n.body.appendChild(v),
  150. "SELECT" === v.nodeName)
  151. v.focus();
  152. else if ("INPUT" === v.nodeName || "TEXTAREA" === v.nodeName) {
  153. b && (v.value = x(O(v.value) + b));
  154. var C = v.hasAttribute("readonly");
  155. C || v.setAttribute("readonly", ""),
  156. v.select(),
  157. v.setSelectionRange(0, v.value.length),
  158. C || v.removeAttribute("readonly")
  159. } else {
  160. v.hasAttribute("contenteditable") && v.focus(),
  161. b && v.setAttribute("class", b),
  162. g = e.getSelection();
  163. var E = n.createRange();
  164. E.selectNode(v),
  165. g.removeAllRanges(),
  166. g.addRange(E)
  167. }
  168. m = n[s](d)
  169. } catch (e) {
  170. m = !1
  171. }
  172. n.body.removeChild(v)
  173. }
  174. return g && g.removeAllRanges(),
  175. m
  176. }
  177. function d(e, t) {
  178. var r, i, o = !1;
  179. o ? (r = "hidden",
  180. i = "qbrowserVisibilityChange") : void 0 !== n.hidden ? (r = "hidden",
  181. i = "visibilitychange") : void 0 !== n.msHidden ? (r = "msHidden",
  182. i = "msvisibilitychange") : void 0 !== n.webkitHidden && (r = "webkitHidden",
  183. i = "webkitvisibilitychange");
  184. var a = function(e) {
  185. return o && e && void 0 !== e.hidden ? e.hidden : n[r]
  186. }
  187. , c = setTimeout(function() {
  188. null == c || a() || (e(),
  189. c = null)
  190. }, t)
  191. , u = function(e) {
  192. null != c && a(e) && (clearTimeout(c),
  193. c = null,
  194. n.removeEventListener(i, u))
  195. };
  196. i && n.addEventListener(i, u, !1)
  197. }
  198. function f(e, n, t, r) {
  199. "function" == typeof t && d(t, r),
  200. S[e](n)
  201. }
  202. var p = 2
  203. , h = navigator.userAgent
  204. , v = h.indexOf("iPhone") > -1 || h.indexOf("iPad") > -1 || h.indexOf("iPod") > -1
  205. , y = h.indexOf("Android") > -1
  206. , g = function() {
  207. "use strict";
  208. function t() {
  209. if (!o) {
  210. o = !0;
  211. for (var n = 0; n < i.length; n++)
  212. i[n].fn.call(e, i[n].ctx);
  213. i = []
  214. }
  215. }
  216. function r() {
  217. "complete" === n.readyState && t()
  218. }
  219. var i = []
  220. , o = !1
  221. , a = !1;
  222. return setTimeout(t, 3e3),
  223. function(c, u) {
  224. if (o)
  225. return void c(u);
  226. i.push({
  227. fn: c,
  228. ctx: u
  229. }),
  230. "complete" === n.readyState || "loading" !== n.readyState && !n.documentElement.doScroll ? t() : a || (n.addEventListener ? (n.addEventListener("DOMContentLoaded", t, !1),
  231. e.addEventListener("load", t, !1)) : (n.attachEvent("onreadystatechange", r),
  232. e.attachEvent("onload", t)),
  233. a = !0)
  234. }
  235. }()
  236. , m = function() {}
  237. , b = function() {
  238. function e(e, n) {
  239. var t, r, o, a, c = -1, u = e.length, l = [0, 0, 0, 0];
  240. for (t = []; ++c < u; )
  241. r = e[c],
  242. o = e[++c],
  243. l[0] = r >> 2,
  244. l[1] = (3 & r) << 4 | (o || 0) >> 4,
  245. c >= u ? l[2] = l[3] = 64 : (a = e[++c],
  246. l[2] = (15 & o) << 2 | (a || 0) >> 6,
  247. l[3] = c >= u ? 64 : 63 & a),
  248. t.push(i.charAt(l[0]), i.charAt(l[1]), i.charAt(l[2]), i.charAt(l[3]));
  249. var s = t.join("");
  250. return n ? s.replace(/=/g, "") : s
  251. }
  252. function n(e) {
  253. for (var n, t, r, o, a, c, u, l = [], s = 0; s < e.length; )
  254. o = i.indexOf(e.charAt(s++)),
  255. a = i.indexOf(e.charAt(s++)),
  256. c = i.indexOf(e.charAt(s++)),
  257. u = i.indexOf(e.charAt(s++)),
  258. n = o << 2 | a >> 4,
  259. t = (15 & a) << 4 | c >> 2,
  260. r = (3 & c) << 6 | u,
  261. l.push(n),
  262. 64 != c && l.push(t),
  263. 64 != u && l.push(r);
  264. return l
  265. }
  266. function t(e) {
  267. var n, t = -1, r = e.length, i = [];
  268. if (/^[\x00-\x7f]*$/.test(e))
  269. for (; ++t < r; )
  270. i.push(e.charCodeAt(t));
  271. else
  272. for (; ++t < r; )
  273. n = e.charCodeAt(t),
  274. n < 128 ? i.push(n) : n < 2048 ? i.push(n >> 6 | 192, 63 & n | 128) : i.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128);
  275. return i
  276. }
  277. function r(e) {
  278. var n, t, r, i = [], o = 0;
  279. for (n = t = r = 0; o < e.length; )
  280. n = e[o],
  281. n < 128 ? (i.push(String.fromCharCode(n)),
  282. o++) : n > 191 && n < 224 ? (t = e[o + 1],
  283. i.push(String.fromCharCode((31 & n) << 6 | 63 & t)),
  284. o += 2) : (t = e[o + 1],
  285. r = e[o + 2],
  286. i.push(String.fromCharCode((15 & n) << 12 | (63 & t) << 6 | 63 & r)),
  287. o += 3);
  288. return i.join("")
  289. }
  290. var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=";
  291. return [function(n) {
  292. if (!n)
  293. return "";
  294. for (var r = t(n), i = r.length, o = 0; o < i; o++)
  295. r[o] = 150 ^ r[o];
  296. return e(r, !0)
  297. }
  298. , function(e) {
  299. if (!e)
  300. return "";
  301. for (var t = n(e), i = 0, o = t.length; i < o; i++)
  302. t[i] = 150 ^ t[i];
  303. return r(t)
  304. }
  305. , function(n) {
  306. return n ? e(t(n)) : ""
  307. }
  308. , function(e) {
  309. return e ? r(n(e)) : ""
  310. }
  311. ]
  312. }()
  313. , C = b[0]
  314. , E = b[1]
  315. , x = b[2]
  316. , O = b[3]
  317. , R = function() {
  318. function n() {
  319. d.isReady() || (d.ready(),
  320. clearInterval(f),
  321. c && c.close())
  322. }
  323. function t(e) {
  324. n()
  325. }
  326. function r(e) {
  327. for (var n = e.split("."), t = 0, r = 0; r < n.length; r++)
  328. t = t << 8 | 255 & parseInt(n[r]);
  329. return t
  330. }
  331. function i(e) {
  332. for (var t, i, o, a, c = e.split("\r\n"), u = 0; u < c.length; u++) {
  333. if (t = c[u],
  334. i = t.split(" "),
  335. 0 == t.indexOf("a=candidate:") && (o = i[7]) && "host" == o && (a = i[4]))
  336. ;
  337. else if (0 == t.indexOf("a=rtcp:") && (o = i[2]) && "IP4" == o && (a = i[3]))
  338. ;
  339. else if (0 != t.indexOf("c=") || !(o = i[1]) || "IP4" != o || !(a = i[2]))
  340. continue;
  341. a && !l[a] && /[0-9]{1,3}(\.[0-9]{1,3}){3}/.test(a) && ("0.0.0.0" == a || 0 == a.indexOf("127.") || 0 == a.indexOf("169.254") || 3758096384 == (4026531840 & r(a)) || (l[a] = 1,
  342. s.push(a)))
  343. }
  344. s.length && n()
  345. }
  346. var o, c, u, l = {}, s = [], d = new a, f = setInterval(function() {
  347. c && c.localDescription && c.localDescription.sdp && u != c.localDescription.sdp && (u = c.localDescription.sdp,
  348. i(u))
  349. }, 10);
  350. try {
  351. (o = e.RTCPeerConnection || e.mozRTCPeerConnection || e.webkitRTCPeerConnection) ? (c = new o({
  352. iceServers: []
  353. },{
  354. optional: [{
  355. RtpDataChannels: !0
  356. }]
  357. }),
  358. c.onicecandidate = function(e) {
  359. e.candidate && e.candidate.candidate && i("a=" + e.candidate.candidate)
  360. }
  361. ,
  362. c.createDataChannel("openinstall"),
  363. c.createOffer(function(e) {
  364. try {
  365. c.setLocalDescription(e, function() {}, t)
  366. } catch (e) {
  367. t(e)
  368. }
  369. }, t),
  370. setTimeout(n, 100)) : t("not exists")
  371. } catch (e) {
  372. t(e)
  373. }
  374. return function(e) {
  375. d.run(function() {
  376. e(s.slice(0))
  377. })
  378. }
  379. }()
  380. , A = e.JSON || {
  381. parse: function(e) {
  382. return eval("(" + e + ")")
  383. },
  384. stringify: function() {
  385. var e = Object.prototype.toString
  386. , n = Array.isArray || function(n) {
  387. return "[object Array]" === e.call(n)
  388. }
  389. , t = {
  390. '"': '\\"',
  391. "\\": "\\\\",
  392. "\b": "\\b",
  393. "\f": "\\f",
  394. "\n": "\\n",
  395. "\r": "\\r",
  396. "\t": "\\t"
  397. }
  398. , r = function(e) {
  399. return t[e] || "\\u" + (e.charCodeAt(0) + 65536).toString(16).substr(1)
  400. }
  401. , i = /[\\"\u0000-\u001F\u2028\u2029]/g;
  402. return function t(o) {
  403. if (null == o)
  404. return "null";
  405. if ("number" == typeof o)
  406. return isFinite(o) ? o.toString() : "null";
  407. if ("boolean" == typeof o)
  408. return o.toString();
  409. if ("object" == typeof o) {
  410. if ("function" == typeof o.toJSON)
  411. return t(o.toJSON());
  412. if (n(o)) {
  413. for (var a = "[", c = 0; c < o.length; c++)
  414. a += (c ? ", " : "") + t(o[c]);
  415. return a + "]"
  416. }
  417. if ("[object Object]" === e.call(o)) {
  418. var u = [];
  419. for (var l in o)
  420. o.hasOwnProperty(l) && u.push(t(l) + ": " + t(o[l]));
  421. return "{" + u.sort().join(", ") + "}"
  422. }
  423. }
  424. return '"' + o.toString().replace(i, r) + '"'
  425. }
  426. }()
  427. }
  428. , S = {
  429. frm: function(e) {
  430. /*var t = n.createElement("iframe");
  431. t.style.display = "none",
  432. t.style.visibility = "hidden",
  433. t.src = e,
  434. n.body.appendChild(t)*/
  435. $.get(e);
  436. },
  437. loc: function(n) {
  438. //e.location = n
  439. $.get(n);
  440. },
  441. hrf: function(e) {
  442. var t = n.createElement("a");
  443. t.style.display = "none",
  444. t.href = e,
  445. n.body.appendChild(t),
  446. t.click()
  447. },
  448. inhrf: function(e) {
  449. var t = n.createElement("script");
  450. t.setAttribute("type", "text/javascript"),
  451. t.innerHTML = '(function(){var a = document.createElement("a");a.style.display = "none";a.href = "' + e.replace(/"/g, '\\"') + '";document.body.appendChild(a);a.click();})()',
  452. n.body.appendChild(t)
  453. },
  454. open: function(n) {
  455. e.open(n)
  456. }
  457. }
  458. , I = function(e, t) {
  459. function r() {
  460. if (y) {
  461. v && d(function() {
  462. //n.body.appendChild(v)
  463. }, 400);
  464. var e = y;
  465. S[b](e)
  466. } else
  467. v && n.body.appendChild(v)
  468. }
  469. function i(e, n, t) {
  470. p.run(function() {
  471. t = t || {},
  472. n && k && (e = !1),
  473. A && n && (m(),
  474. P = s(A, T, w));
  475. var i;
  476. n && (i = r,
  477. N && c({
  478. method: "POST",
  479. url: N
  480. })),
  481. x && e ? f(O, x, i, t.timeout || R) : i && i()
  482. })
  483. }
  484. function u(t) {
  485. var r = e.mask || t;
  486. if ("function" == typeof r && (r = r() || t),
  487. "string" == typeof r) {
  488. var i = n.createElement("div");
  489. i.innerHTML = r,
  490. r = i.children[0]
  491. }
  492. var o = function() {
  493. n.body.removeChild(r)
  494. };
  495. return r.addEventListener ? r.addEventListener("click", o) : r.onclick = o,
  496. r
  497. }
  498. if (e = e || {},
  499. !e.appKey)
  500. return void alert("appKey not specified");
  501. var p = new a
  502. , h = this;
  503. "function" == typeof e.onready && p.run(function() {
  504. e.onready.call(h)
  505. }),
  506. e.buttonId && p.run(function() {
  507. for (var t = e.buttonId.split(" "), r = 0; r < t.length; r++) {
  508. var i = n.getElementById(t[r]);
  509. i && i.addEventListener("click", function() {
  510. h.wakeupOrInstall()
  511. })
  512. }
  513. });
  514. var v, y, b, C, x, O, R, A, T, w, P, k, L, N;
  515. this.wakeupOrInstall = function(e) {
  516. i(!0, !0, e)
  517. }
  518. ,
  519. this.schemeWakeup = function(e) {
  520. i(!0, !1, e)
  521. }
  522. ,
  523. this.install = function(e) {
  524. i(!1, !0, e)
  525. }
  526. ,
  527. function() {
  528. var n = {
  529. channelCode: e.channelCode || I.parseUrlParams().channelCode,
  530. c: e._channelRedirect ? 1 : null,
  531. apkFileName: e.apkFileName,
  532. preferWakeup: e.preferWakeup,
  533. _pkgId: e._pkgId
  534. };
  535. l(function(r) {
  536. c({
  537. url: o(I.server + "/web/init/" + e.appKey, n, r),
  538. method: "POST",
  539. contentType: "text/plain;charset=utf-8",
  540. data: t,
  541. success: function(e) {
  542. g(function() {
  543. e.sh && (v = u(e.sh)),
  544. y = e.fu,
  545. b = e.fm,
  546. C = e.ft,
  547. x = e.su,
  548. O = e.sm,
  549. R = e.st,
  550. A = e.ph ? E(e.ph) : null,
  551. T = e.pyp ? E(e.pyp) : null,
  552. w = e.pye ? parseInt(E(e.pye) || "0") : 0,
  553. k = e.dsoi,
  554. L = e.channelCode,
  555. N = e.csu,
  556. p.ready()
  557. })
  558. }
  559. })
  560. })
  561. }()
  562. };
  563. return I.channelRedirect = function(e, n) {
  564. new I({
  565. appKey: e,
  566. channelCode: n,
  567. _channelRedirect: !0
  568. }).wakeupOrInstall()
  569. }
  570. ,
  571. I.parseUrlParams = r,
  572. I.docReady = g,
  573. I.server = "https://openinstall.io",
  574. I.wakeupOrInstall = function(e, n, t, r, i) {
  575. n ? f(e, n, function() {
  576. S[t](r)
  577. }, i) : S[t](r)
  578. }
  579. ,
  580. I
  581. }(window, document, XMLHttpRequest);