UNPKG

fastman3-dfyjapp-callapp

Version:

h5 call app

311 lines 13 kB
/* * @Author: zhangkunjie * @Date: 2021-10-22 16:00:05 * @Company: orientsec.com.cn * @Description: callapp 新组件 */ import { isFromWeiBo, isFromApp, getQueryString, isFromWeiXin, detect } from "./utils"; import CallApp from "callapp-lib"; require(process.env.TARO_ENV ? "./newCallAppV3.scss" : "./newCallApp.scss"); var callappUrl; if (process.env.APP_ENV == "prod") { callappUrl = require("fastman3-dfyjapp-configcenter/es/callapp/prod"); } else if (process.env.APP_ENV == "mock") { callappUrl = require("fastman3-dfyjapp-configcenter/es/callapp/mock"); } else { callappUrl = require("fastman3-dfyjapp-configcenter/es/callapp/integrate.h5"); } var newCallLib = new CallApp({ scheme: { protocol: "dfyj20170811" }, appstore: "https://itunes.apple.com/cn/app/id961539789", yingyongbao: "//a.app.qq.com/o/simple.jsp?pkgname=com.dfzq.winner", fallback: "https://cfyjh5-v3.dfzq.com.cn/html5-marketing/marketing-install/index.html", timeout: 3000 }); // 非app展示 var openButtonHtml = function openButtonHtml() { var footer = document.createElement("div"); footer.className = "shareNavigation-footer"; document.body.appendChild(footer); var html = document.createElement("div"); html.className = "ui-row-flex shareNavigation"; html.id = "wraper"; document.body.appendChild(html); var iconTtml = document.createElement("div"); var span1 = document.createElement("span"); span1.innerText = "东方证券"; var span2 = document.createElement("span"); span2.innerText = "悦享投资之美"; iconTtml.className = "logoImage"; var iconWraperhtml = document.createElement("div"); iconWraperhtml.className = "ui-col-2"; var logoTextHtml = document.createElement("div"); logoTextHtml.className = "logoText"; logoTextHtml.appendChild(span1); logoTextHtml.appendChild(span2); var buttonWraperhtml = document.createElement("div"); var buttonHtml = document.createElement("button"); buttonHtml.innerText = "立即打开"; buttonWraperhtml.className = "open"; buttonWraperhtml.id = "btn"; iconWraperhtml.appendChild(iconTtml); iconWraperhtml.appendChild(logoTextHtml); buttonWraperhtml.appendChild(buttonHtml); html.appendChild(iconWraperhtml); html.appendChild(buttonWraperhtml); }; // 微信展示 var weiXinPanel = function weiXinPanel() { var bottomText = detect.os.ios ? "在默认浏览器中打开" : "在浏览器中打开"; var weixinPanelHtml = document.createElement("div"); weixinPanelHtml.id = "weixinPanel"; document.body.appendChild(weixinPanelHtml); var imgWraperTtml = document.createElement("div"); imgWraperTtml.id = "arraw"; var imgHtml = document.createElement("div"); imgHtml.className = "img"; imgWraperTtml.appendChild(imgHtml); var pHtml = document.createElement("p"); pHtml.innerText = "\u8BF7\u70B9\u51FB\u53F3\u4E0A\u89D2\u6309\u94AE\uFF0C\u9009\u62E9".concat(bottomText); weixinPanelHtml.appendChild(imgWraperTtml); weixinPanelHtml.appendChild(pHtml); }; // const alertPannel=(params:AlertParams)=>{ // const wraperPananelHtml=document.createElement('div'); // wraperPananelHtml.id="wraper_pannel" // const alertWraperHtml=document.createElement('div'); // alertWraperHtml.id="alert_id"; // document.body.appendChild(wraperPananelHtml); // const alertMainHtml=document.createElement('div'); // alertMainHtml.id="alert_main" // const alertContentHtml=document.createElement('p'); // const alertTitleHtml=document.createElement('p') // alertTitleHtml.id='alert_title_id'; // alertContentHtml.id='alert_conten'; // alertContentHtml.innerText="您还未下载东方赢家APP,您可以先开立账户,后续下载APP进行交易" // alertMainHtml.append(alertContentHtml,alertTitleHtml); // const alertButtonHtml=document.createElement('div'); // alertButtonHtml.id="btn_wraper" // const cancelButtonHtml=document.createElement("button"); // cancelButtonHtml.id='cancel_id'; // cancelButtonHtml.innerText="取消"; // const confirmButtonHtml=document.createElement("button"); // confirmButtonHtml.id='confirm_id'; // confirmButtonHtml.innerText="立即开户"; // alertButtonHtml.append(cancelButtonHtml,confirmButtonHtml) // alertWraperHtml.append(alertMainHtml,alertButtonHtml) // wraperPananelHtml.append(alertWraperHtml) // } var callBack = function callBack(params) { if (params === void 0) { params = {}; } var configuration = params.configuration; // 要跳转的地址和配置的中转页集合 var router_url, transerUrls; // 当前地址是否带有渠道号 且渠道号有值 if (location.href.indexOf("trackChannel") !== -1 && getQueryString("trackChannel")) { // 判断是v1,v2和v3 if (configuration) { transerUrls = configuration === null || configuration === void 0 ? void 0 : configuration.callAppPluginConfig.Transfer_URLS; } else { transerUrls = callappUrl.Transfer_URLS; } for (var i in transerUrls) { if (i.replace(/\"/g, "") === getQueryString("trackChannel")) { router_url = transerUrls[i]; } else { alert("未找到对应地址"); router_url = getDefaulturl(configuration); } } } else { router_url = getDefaulturl(configuration); } return router_url.replace(/\"/g, ""); }; var getDefaulturl = function getDefaulturl(configuration) { var default_route_url; if (detect.os.ios) { if (configuration) { default_route_url = configuration === null || configuration === void 0 ? void 0 : configuration.callAppPluginConfig.DEFAULT_DOWNLOAD_IOS_URL; } else { default_route_url = "https://cfyjh5-v3.dfzq.com.cn/html5-marketing/marketing-install/index.html"; } } else { if (configuration) { default_route_url = configuration === null || configuration === void 0 ? void 0 : configuration.callAppPluginConfig.DEFAULT_DOWNLOAD_URL; } else { default_route_url = "https://cfyjh5-v3.dfzq.com.cn/html5-marketing/marketing-install/index.html"; } } return default_route_url.replace(/\"/g, ""); }; /** * 基础唤起app函数 * @param params * @param path 唤起app的路径 */ var baseCallApp = function baseCallApp(params, path) { if (params === void 0) { params = {}; } if (isFromWeiBo()) { weiXinPanel(); var weixinAllHtml_1 = document.getElementById("weixinPanel"); weixinAllHtml_1 === null || weixinAllHtml_1 === void 0 ? void 0 : weixinAllHtml_1.addEventListener("click", function () { document.body.removeChild(weixinAllHtml_1); }); } else if (isFromWeiXin()) { weiXinPanel(); var weixinAllHtml_2 = document.getElementById("weixinPanel"); weixinAllHtml_2 === null || weixinAllHtml_2 === void 0 ? void 0 : weixinAllHtml_2.addEventListener("click", function () { document.body.removeChild(weixinAllHtml_2); }); } else { newCallLib.open({ path: path, callback: function callback() { location.href = callBack(params); } }); } }; /** * 获取url 查询参数或hash后面的查询参数,返回键值对 * @param url * @returns object */ var getURLParameters = function getURLParameters(url) { return (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(function (a, v) { return a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1), a; }, {}); }; /** * UniversalLink链接生成器 * @returns 返回一个iOS可解析的 universalUrl * * 采用三次编码约定:(针对<5.9.0的iOS版本,使用open=来接受,可使用 https://websanova.com/utils/url 进行测试) * 步骤一. 对目标地址(https://{domain}/{path}/?qs#/hash?qs)中2个 qs 部分进行编码形成 queryStringEncoder; * 步骤二. 再对 https://{domain}/{path}/?queryStringEncoder 进行编码形成 targetUrlEncoder; * 步骤三. 再对 dfyj20170811://dl/wb?url=targetUrlEncoder 进行再编码形成 schemaUrlEncoder; * 步骤四. 最终形成规范地址:https://appullinks.dfzq.com.cn/dfyjlink?open=schemaUrlEncoder; * * 采用二次编码约定:(针对>=5.9.0的iOS版本,使用callapp=来接受) * 步骤一. 对 location.href 进行编码形成 targetUrlEncoder; * 步骤二. 对 dfyj20170811://dl/wb?url=targetUrlEncoder 进行再编码形成 schemaUrlEncoder; * 步骤三. 最终形成规范地址:https://appullinks.dfzq.com.cn/dfyjlink?open=schemaUrlEncoder; * * 注意:open和callapp需要同时携带在url上,open=用于<5.9.0的兼容,callapp=则是用于>=5.9.0的兼容 */ var universalurl = function universalurl() { // 情况1:http://192.168.114.160:10086/?recommend=1&appversion=5.7.3#/pages/fundSubscribeDetail/index?prodCode=000395 // 情况2:http://192.168.114.160:10086/?recommend=1&appversion=5.7.3#/pages/fundSubscribeDetail/index // 情况3:http://192.168.114.160:10086/#/pages/fundSubscribeDetail/index?prodCode=000395 // 经分析,hash部分中可能存在 qs,同时 qs 也可能出现在标准体html后!另外 recommend 和 appversion 作为原生分享出来的派生参数。 // @ts-ignore var parser = window.url; var targetUrl = location.href; console.log("[UL]targetUrl: " + targetUrl); // 兼容 <5.9.0 的iOS版本 // 步骤一 // 页面标准的 qs 编码 var queryString = parser("query", targetUrl) || ""; var queryStringEncoder = ""; if (queryString) { console.log("[UL]queryString: " + queryString); queryStringEncoder = window.encodeURIComponent(queryString); targetUrl = targetUrl.replace(queryString, queryStringEncoder); } // 页面标准的 hash 编码,需带# var hash = parser("hash", targetUrl); var hashEncoder = ""; if (hash) { // 检测 hash 部分中是否包含 qs 部分 var hashQsString = parser("query", hash); if (hashQsString) { console.log("[UL]hashQsString: " + hashQsString); var hashQsStringEncoder = window.encodeURIComponent(hashQsString); targetUrl = targetUrl.replace(hashQsString, hashQsStringEncoder); } } // 步骤二 var targetUrlEncoder = window.encodeURIComponent(targetUrl); console.log("[UL]targetUrlEncoder: " + targetUrlEncoder); // 步骤三 var schemaUrlEncoder = window.encodeURIComponent("dfyj20170811://dl/wb?url=".concat(targetUrlEncoder)); console.log("[UL]schemaUrlEncoder: " + schemaUrlEncoder); // 步骤四 var universalLink = "https://appullinks.dfzq.com.cn/dfyjlink?open=".concat(schemaUrlEncoder); console.log("[UL]universalLink: " + universalLink); // 兼容 >=5.9.0 的iOS版本 // 步骤一 // 对 location.href 进行编码形成 targetUrlEncoder var targetUrlEncoder2 = window.encodeURIComponent(location.href); console.log("[UL]targetUrlEncoder2: " + targetUrlEncoder2); // 步骤二. 对 dfyj20170811://dl/wb?url=targetUrlEncoder 进行再编码形成 schemaUrlEncoder; var schemaUrlEncoder2 = window.encodeURIComponent("dfyj20170811://dl/wb?url=".concat(targetUrlEncoder2)); console.log("[UL]schemaUrlEncoder2: " + schemaUrlEncoder2); // 步骤三 var universalLink2 = "".concat(universalLink, "&callapp=").concat(schemaUrlEncoder2); console.log("[UL]universalLink2: " + universalLink2); return universalLink2; }; /** * 唤起app打开当前location.href * @param params fastmanV3时不用传 */ var callAppLH = function callAppLH(params) { if (params === void 0) { params = {}; } // if (detect.os.ios && isFromWeiXin()) { if (detect.os.ios) { location.href = universalurl(); } else { baseCallApp(params, "dl/wb?url=".concat(encodeURIComponent(location.href))); } }; /** * fastmanV3函数,浏览器唤起app打开url * @param callUrl 打开的url,默认为当前页面的地址,原生界面时调用dfyjdfyj20170811://前缀 */ var callAppUrlV3 = function callAppUrlV3(callUrl) { if (callUrl === void 0) { callUrl = window.location.href; } var path = callUrl; if (/^dfyj/.test(callUrl)) { // 判断是否原生指令 path = callUrl.replace('dfyj://', ''); path = path.replace('dfyj20170811://', ''); } if (/^http/.test(callUrl)) { // 判断是否互联网url path = 'dl/wb?url=' + encodeURIComponent(callUrl); } baseCallApp({}, path); }; /** * 样式为:页面下面有下载导航栏,点击导航栏中的立即打开按钮,浏览器里唤起app * @param params fastmanV2的config文件 */ var newCallApp = function newCallApp(params, beforeCallApp) { if (params === void 0) { params = {}; } if (beforeCallApp === void 0) { beforeCallApp = function beforeCallApp() {}; } if (!isFromApp()) { openButtonHtml(); var btnHtml = document.getElementById("btn"); btnHtml === null || btnHtml === void 0 ? void 0 : btnHtml.addEventListener("click", function () { beforeCallApp(); callAppLH(params); }); } }; export { newCallApp, callAppUrlV3 };