@likg/js-bridge
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

概述

此库主要用于原生和H5之间通过方法进行交互,H5开发者若要使用本库,需提示原生开发者根据本库 声明文件 规则定义相应的方法,否则无法使用。本库约定,安卓开发者注入到H5的方法对象为 js_android

为了统一入参,便于后期拓展,原生接收参数的类型为对象(Object)类型(注意:本库会将参数对象类型JSON序列化为字符串之后再进行传递)。H5 在调用原生方法时,如果没有参数设置,本库会默认传递 null 对象给原生,原生在处理参数时需注意。

H5开发者在使用本库时,对于需传递 供原生调用 的JS方法,本库默认接收字符串方法名,并做特殊处理,将其转为 {callback: 'fnName'} 给原生。比如本库封装了一个 getLocation 的通信方法,H5在调用时,只需传递供原生回调的方法名即可,如下所示:

getLocation('handler');

其中,handler 为 H5 挂载在 window 上的全局方法,即供原生调用的方法名。原生接收到的类型为:

{callback: 'handler'}

再次强调,由于 Android 无法直接接收对象,所以本库在处理安卓参数(对象传参)时,则先 JSON 序列化之后再进行传递。

关于同步返回:

在H5和原生交互的方法中,可能会遇到调用原生方法同步返回的情况,比如,我要调用 getToken 方法获取用户token,期望原生能够直接返回,而不是再定义一个方法供原生调用将token传递给H5。由于安卓在方法内部可以return供H5直接接收,而iOS不能,所以这里H5采用 prompt 方式处理,那么iOS开发者在如下方法:

- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;

中统一拦截H5中的prompt,并通过H5传递过来的type类型判断并做相应处理。如下所示:

// 设置代理
self.webView.UIDelegate = self;

// JS端调用prompt函数时,会触发此代理方法。
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler {
    NSError *err = nil;
    NSData *dataFromString = [prompt dataUsingEncoding:NSUTF8StringEncoding];
    // 读取数据
    NSDictionary *data = [NSJSONSerialization JSONObjectWithData:dataFromString options:NSJSONReadingMutableContainers error:&err];
    if (!err){
        // 根据data中type类型的返回指定数据
        completionHandler(returnValue);
    }
}

安装

H5开发通过如下方式安装本库:

$ npm install lg-js-bridge
$ yarn add lg-js-bridge

使用

这里以获取Token为例:

import jsBridge from 'lg-js-bridge';

const token = jsBridge.getToken();

声明文件

特别说明:如下示例中的 callback 表示 H5 给原生作为回调的函数名变量,H5 调用时将原生回调的函数名作为参数设置;

/************************************************
 ****** APIs
************************************************/
/**
 * 1. 跳转微信小程序
 * @param {*} options
 */
static launchMiniProgram(options: {
    userName: string /** 小程序原始id */;
    path: string /** 拉起小程序页面的可带参路径,不填默认拉起小程序首页 */;
    miniprogramType: 0 | 1 | 2 /** 打开类型;0:正式版,1:开发版,2:体验版 */;
}): void;
/**
 * 2. H5调用原生支付
 */
static payment(params: {
    callback: string /** 支付回调H5函数名 */;
    payType: string /** 支付类型(这里需要和原生约定类型,如:微信支付 - WX_PAY,支付宝支付 - ALI_PAY,苹果支付 - APPLE_PAY) */;
    payStr: string /** 支付参数(这里需要和后台沟通,将原生拉起支付的参数以JSON字符串形式返回,到时直接传递给原生并由原生解析即可) */;
    orderNo?: string /** 订单号(有时原生调用支付回调函数之后,H5这边需要通过订单号查询支付状态,所以这里将订单号传给原生,原生在回调时作为参数回传给H5使用) */;
}): void;
/**
 * 3. H5调用原生分享
 */
static shareWith(options: {
    type: number /** 分享类型: 0 文字 / 1 图片 / 2 网页链接 / 3 视频连接 / 4 小程序 */;
    title?: string /** 标题(可选) */;
    link?: string /** 网页链接(可选) */;
    text?: string /** 文字内容/网页链接描述(可选) */;
    videoUrl?: string /** 视频连接地址(可选) */;
    imageUrl?: string /** 图片链接地址/网页链接缩略图(可选) */;
    imageBase64?: string /** 图片base64(可选) */;
}): void;
/**
 * 4. 保存图片至手机相册
 * @param images 图片集合/这里将图片的在线链接放入集合传递给原生进行保存
 */
static saveImages(images: string[]): void;
/**
 * 5. 保存视频至手机相册
 * @param {string} videoUrls 视频地址集合/这里将视频的在线链接放入集合传递给原生进行保存
 */
static saveVideos(videoUrls: string[]): void;
/**
 * 6. 通知原生返回上一页(原生pop控制器)
 */
static nativeBack(): void;
/**
 * 7. 通知原生绑定平台
 * @param options
 * @param options.platform 平台:WX/ALIPAY
 * @param options.callback 微信绑定之后的回调函数
 */
static bindPlatform(options: {
    platform: 'WX' | 'ALIPAY';
    callback: string;
}): void;
/**
 * 8. 通知原生打开APP
 * @param appTag WX | QQ
 */
static openApp(appTag: 'WX' | 'QQ'): void;
/**
 * 9. 通知原生定位
 * @param callback 原生定位成功以后调用H5回调函数,并将定位信息作为回调函数参数传递。
 */
static getLocation(callback: string): void;
/**
 * 10. 从原生获取token。
 *
 * iOS开发者注意:----- 此方法通过prompt触发,type类型为:GET_TOKEN
 */
static getToken(): string;
/**
 * 11. 分享(邀请)海报 --- 裂变
 * @param options
 * @param options.type  -- 分享(邀请)标识符,H5和原生根据具体使用场景自行约定一个字符串常量标识;
 * @param options.callback -- H5回调函数名,原生在成功触发邀请之后调用该js函数,用于通知H5做后续处理;
 */
static sharePoster(options: {
    type: string;
    callback: string;
}): void;
/**
 * 12. 设置剪切板
 * @param value 复制内容
 */
static setClipboard(value: string): void;
/**
 * 13. 获取剪切板内容
 * @returns value
 */
static getClipboard(): string;
/**
 * 14. 百度统计
 * @param eventId 事件ID
 */
static baiduStatistics(eventId: string): void;
/**
 * 15. 通知原生刷新页面
 * @param k 通知标识,可以理解为事件名称,需原生和H5协商
 */
static nativeRefresh(k: string): void;

Readme

Keywords

Package Sidebar

Install

npm i @likg/js-bridge

Weekly Downloads

0

Version

1.0.1

License

ISC

Unpacked Size

20.4 kB

Total Files

8

Last publish

Collaborators

  • lihongyao