fastman3-dfyjapp-jsbridge
Version:
a jsbridge module for dfyj app
201 lines • 7.59 kB
JavaScript
/*
* @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 };