fastman3-dfyjapp-callapp
Version:
h5 call app
311 lines • 13 kB
JavaScript
/*
* @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 };