npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@likg/js-bridge

v1.0.1

Published

Cookie APIs

Downloads

2

Readme

概述

此库主要用于原生和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;