UNPKG

fastman3-dfyjapp-jsbridge

Version:

a jsbridge module for dfyj app

201 lines 7.59 kB
/* * @Author: shenzhiwei * @Date: 2021-04-11 16:33:48 * @Company: orientsec.com.cn * @Description: 默认处理,处理非 h5 端的逻辑 */ import { navigateBack, setNavigationBarTitle } from "@tarojs/taro"; // 必须这么导入,不要使用全局 Taro 导入 import { Router } from "fastman3-taro-router"; import { extend, systemlog as log } from "fastman3-common-helper"; import AppAuthorize from "./models/appAuthorize"; /** * 桥接准备,在使用桥接指令前需要先注册成功 * 客户端:建立桥接模式后直接执行回调 * 小程序端:目前直接执行回调 * 微信:直接执行回调(还额外包含微信用户信息恢复的逻辑处理) */ var ready = function ready() { log("[ready] ->"); return new Promise(function (resolve) { log("[ready] <-"); resolve("ready ok"); }); }; /** * 通信鉴权 * 客户端:向客户端获取token等用户信息凭证后执行回调,并将必要的用户信息存储在 AppAuthorize 实例中 * 小程序端:目前直接执行回调 * 微信端:必要时调用 IF156008 恢复用户信息,并将必要的用户信息存储在 AppAuthorize 实例中,可额外获取 openid 和用户微信昵称 */ var oauth = function oauth() { log("[oauth] ->"); return new Promise(function (resolve) { log("[oauth] <-"); resolve("oauth ok"); }); }; /** * 页面前进 * 客户端:打开一个新的 webview 容器打开页面 * 小程序端:调用自建路由模块(type 这个参数只适用于小程序端,一种是 router.navigate 的形式,另一种是打开一个新的小程序的形式) * 微信端:使用原生函数 location.href 进行跳转 */ // @ts-ignore var go = function go(params) { var context = extend({ title: "", // 0-不需要手势密码;1-手势密码锁屏;2-资金账号锁屏; locktype: 0 }, params); // 凡泰极客小程序的容错处理 var isFtRuntime = false; try { // @ts-ignore isFtRuntime = !!ft; } catch (e) { isFtRuntime = false; } // 通过 Router 路由模块进行跳转,参数为 uri // 通过判断当前路径是否包含http/https,实现H5和小程序端跳转 if (context.uri.indexOf("http") != -1) { // url后面添加参数 var _addGetUrlParam_ = function addGetUrlParam_1(search, key, val) { var newParam = key + '=' + val, params = '?' + newParam; if (search.indexOf("?") != -1 && search.indexOf("#") == -1) { params = search.replace(new RegExp('[?&]' + key + '[^&]*'), '$1' + newParam); if (params === search) { params += '&' + newParam; } } else if (search.indexOf("#") != -1 && search.indexOf("?") == -1) { var urls = search.split("#"); params = urls[0] + "?" + newParam + "#" + urls[1]; } else if (search.indexOf("#") != -1 && search.indexOf("?") != -1) { var urls = search.split("#"); params = _addGetUrlParam_(search.split("#")[0], "currentTime", process.env.PACKAGE_VER) + "#" + urls[1]; } else { params = search + params; } return params; }; // 添加时间戳后的地址 var URI_ADD_TIME = _addGetUrlParam_(context.uri, "currentTime", process.env.PACKAGE_VER); // 增加小程序来源标识后的地址 var URI = _addGetUrlParam_(URI_ADD_TIME, "isFromFastman3Mini", "mini"); var inputParams = { // 原生页面不支持 data 属性 params: { uri: encodeURIComponent(URI), nextPageTitle: encodeURI(context.title) } }; log("[go] -> ".concat(JSON.stringify(inputParams))); Router.navigate({ // 因凡泰也使用了微信小程序运行时,但是无法正常使用 bindmessage 事件,因此在凡泰小程序端使用微信的原生页面来替代 taro 的通用 webview 页面 url: isFtRuntime ? "/pages/weappWebview/native" : "/pages/h5Webview/index" }, inputParams); log("[go] <-"); } else { var inputParams = { // 当前地址为小程序时直接跳转当前路径 url: context.uri }; log("[go] -> ".concat(JSON.stringify(inputParams))); Router.navigate(inputParams); log("[go] <-"); } }; /** * 页面后退 * 客户端:调用后将返回到栈的最外层,它并不会返回到前一个栈,如果需要返回前一个栈请使用history.back()来实现 * 小程序端:使用 Taro.navigateBack API 来实现 * 微信端:当step没有定义时调用history.back(), 否则调用history.go(-1 * step) */ var back = function back(params) { var inputParams = params || {}; log("[back] -> ".concat(JSON.stringify(inputParams))); navigateBack(inputParams); log("[back] <- ".concat(JSON.stringify(inputParams))); }; /** * 原生跳转 * 客户端:以一个新的 webview 方式打开原生开发的功能 * 小程序端:触发 fail 失败回调 * 微信端:触发 fail 失败回调 */ var dynamicLink = function dynamicLink(params) { log("[dynamicLink] ->"); // 该功能在小程序端不支持时 if (typeof params.fail === "function") { params.fail(); } log("[dynamicLink] <- 当前端不支持"); }; /** * 业务指令调用(暂未实现) * @param type Request消息类型 * @param payload Request消息结构,即输入参数 * @param success 用于处理成功回调的函数,success(输出消息结构中的payload) * @param error 用于处理失败回调的函数,error(输出消息结构中的info) */ // @ts-ignore var onRequest = function onRequest(type, payload, success, error) { log("[onRequest] ->"); // 该功能在小程序端不需要实现,占位用 log("[onRequest] <- 当前端不支持"); }; /** * 小程序端 设置导航头 【小程序只支持设置标题名称】 */ var navigationBar = function navigationBar(params) { var title = params.title; var inputParams = { title: title }; log("[onNavigateBar] -> ".concat(JSON.stringify(inputParams))); setNavigationBarTitle(inputParams); log("[onNavigateBar] <-"); }; /** * 小程序: 直接调用Taro.useDidShow * APP: view将于出现时触发的回调函数(v3使用) * 其它: 马上回调 * 该指令中如果调用服务接口请务必自行处理接口的onAuthError回调 * @supported — dfyjapp */ // eslint-disable-next-line no-unused-vars var willAppear = function willAppear(_callback) { if (_callback === void 0) { _callback = function _callback() {}; } log("[willAppear] ->"); // 2022-12-9: 需要去除,如果 willAppear 在 useEffect 内调用,小程序不支持钩子嵌套 // // 小程序端直接调用Taro.useDidShow // useDidShow(() => { // log("[willAppear] <-"); // if(_callback) { // _callback(); // } // }) log("[willAppear] <-"); if (_callback) { _callback(); } }; /** * 检查App通知权限开启状态 */ var onCheckAppNotification = function onCheckAppNotification(options) { log("[onCheckAppNotification] -> ".concat(JSON.stringify(options))); // 该功能在小程序端不需要实现,占位用 log("[onCheckAppNotification] <- 当前端不支持"); }; /** * 跳转至App通知权限系统页 */ var onGoToCheckAppNotification = function onGoToCheckAppNotification(options) { log("[onGoToCheckAppNotification] -> ".concat(JSON.stringify(options))); // 该功能在小程序端不需要实现,占位用 log("[onGoToCheckAppNotification] <- 当前端不支持"); }; export { AppAuthorize, ready, oauth, go, back, dynamicLink, onRequest, navigationBar, willAppear, onCheckAppNotification, onGoToCheckAppNotification };