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

wechat-webview-bridge

v2.0.0

Published

A substitute for the official WeChat JS-SDK library.

Downloads

3

Readme

wechat-webview-bridge

Version Downloads License

A substitute for the official WeChat JS-SDK library, rewritten from https://res.wx.qq.com/open/js/jweixin-1.6.0.js.

Quick Start

import axios from 'axios'
import WeChatWebViewBridge, { type ConfigData } from 'wechat-webview-bridge'

/**
 * Function to request WeChat JS-SDK configuration parameters.
 *
 * @var Function
 */
const configHandler = async function ({ url }: { url: string }): ConfigData {
  return axios.post('/url/to/wechat-jssdk-config', { url })
    .then(res => {
      return {
        appId: res.appId,
        timestamp: res.timestamp,
        nonceStr: res.nonceStr,
        signature: res.signature
      }
    })
}

/**
 * List of WeChat JS-SDK API you want to grant.
 *
 * @var Array
 */
const jsApiList = [
  'menu:share:timeline',
  'menu:share:appmessage',
  'imagePreview',
  'hideMenuItems',
  'showMenuItems',
  'scanQRCode',
  'getBrandWCPayRequest'
]

/**
 * List of WeChat Open Tag you want to grant.
 *
 * @var Array
 */
const openTagList = [
  'wx-open-launch-app'
]

/**
 * The bridge instance.
 *
 * @var WeChatWebViewBridge
 */
const bridge = new WeChatWebViewBridge({
  configHandler,
  jsApiList,
  openTagList,
  debug: true
})

// wait for WebView bridge initialized
await bridge.load()
  .then(() => bridge.config())
  .then(() => {
    // example: listen on WeChat Timeline Share event
    return bridge.on('menu:share:timeline', () => {
      // invoke registration of sharing
      bridge.invoke('shareTimeline', {
        title: 'The Title Goes Here',
        desc: 'The description goes here',
        img_url: 'https://www.example.com/image.jpeg',
        link: window.location.href,
        type: 'link',
        data_url: ''
      })
        .then(data => {
          // successfully shared
        })
        .catch(error => {
          if (error.message === 'cancel') {
            // user cancelled
            return
          }
          // any other reasons
        })
    })
  })
  .then(() => {
    // example: invoke hiding custom menu items
    return bridge.invoke('hideMenuItems', {
      menuList: [
        'menuItem:share:facebook'
      ]
    })
  })

API

new WeChatWebViewBridge(<options>)

| Parameter | Type | Description | Default | | --- | --- | --- | --- | | options.configHandler | ({ url } : { url: string }) => ConfigData | Function to request WeChat JS-SDK configuration parameters. It should return a Promise and resolves with an object contains WeChat configuration parameters (appId, timestamp, nonceStr and signature). | (required) | | options.jsApiList | Array<string> | List of WeChat JS-SDK API names you want to grant. | [] | | options.openTagList | Array<string> | List of WeChat Open Tag you want to grant. | [] | | options.debug | boolean | Enable console debug output. | false |

bridge.load()

Asynchronously wait for WebView bridge initialized. The returned Promise will be resolved once the bridge is ready to config.

  • Parameters: (none)
  • Returns: Promise<void>

bridge.config()

Get configuration parameters from provided configHandler function and then pass to preVerifyJSAPI handler immediately. The returned Promise will be resolved once the bridge is ready to use.

  • Parameters: (none)
  • Returns: Promise<any>

bridge.invoke(<handerName>, [params])

Invoke WebView bridge handler. (see below for the complete handler list)

| Parameter | Type | Description | Default | | --- | --- | --- | --- | | handerName | string | The name of handler to be called. | (required) | | params | object | Parameters passed to WeChat WebView bridge. | {} |

  • Returns: Promise<any>

bridge.on(<handlerName>, <listener>)

Listen on WebView bridge event. (see below for the complete handler list)

| Parameter | Type | Description | Default | | --- | --- | --- | --- | | handlerName | string | The name of event to be listened on. | (required) | | listener | function | The callback for WeChat WebView bridge response. | (required) |

  • Returns: Promise<void>

bridge.urlToConfig

Get the trimmed URL at the moment for WeChat WebView to configure.

  • Returns: string

bridge.configData

Get WeChat WebView bridge configuration data. The data will be fulfilled after a successful configHandler call.

  • Returns: object

bridge.ready

Get whether WeChat WebView bridge was successfully configured before.

  • Returns: boolean

WeChatWebViewBridge.isIOS

Whether we are in an iOS device.

  • Returns: boolean

WeChatWebViewBridge.isAndroid

Whether we are in an Android device.

  • Returns: boolean

WeChatWebViewBridge.isWeChat

Whether we are in a WeChat WebView.

  • Returns: boolean

WeChatWebViewBridge.isWeChatBrowser

Whether we are in a WeChat Browser.

  • Returns: boolean

WeChatWebViewBridge.isWeChatMiniProgram

Whether we are in a WeChat Mini Program.

  • Returns: boolean

WeChatWebViewBridge.isWeChatDevTools

Whether we are in a WeChat Dev Tools.

  • Returns: boolean

Handlers for JS calling WebView Bridge

| Handler Name | Parameters | Official Description | | ----------------------------- | --- | --- | | preVerifyJSAPI | verifyJsApiList, verifyOpenTagList | 注入权限验证配置 | | checkJsApi | jsApiList | 判断当前客户端版本是否支持指定 JS 接口 | | shareTimeline | title, desc, img_url, link, type, data_url | (unknown) | | sendAppMessage | title, desc, link, img_url, type, data_url | (unknown) | | shareQQ | title, desc, img_url, link | (unknown) | | shareWeiboApp | title, desc, img_url, link | (unknown) | | shareQZone | title, desc, img_url, link | (unknown) | | updateTimelineShareData | title, link, imgUrl | 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容 | | updateAppMessageShareData | title, desc, link, imgUrl | 自定义“分享给朋友”及“分享到QQ”按钮的分享内容 | | startRecord | (none) | 开始录音接口 | | stopRecord | (none) | 停止录音接口 | | playVoice | localId | 播放语音接口 | | pauseVoice | localId | 暂停播放接口 | | stopVoice | localId | 停止播放接口 | | uploadVoice | localId, isShowProgressTips | 上传语音接口 | | downloadVoice | serverId, isShowProgressTips | 下载语音接口 | | translateVoice | localId, isShowProgressTips | 识别音频并返回识别结果接口 | | chooseImage | count, sizeType, sourceType | 拍照或从手机相册中选图接口 | | imagePreview | current, urls | 预览图片接口 | | uploadImage | localId, isShowProgressTips | 上传图片接口 | | downloadImage | serverId, isShowProgressTips | 下载图片接口 | | getLocalImgData | localId | 获取本地图片接口 | | getNetworkType | (none) | 获取网络状态接口 | | openLocation | latitude, longitude, name, address, scale, infoUrl | 使用微信内置地图查看位置接口 | | geoLocation | (none) | 获取地理位置接口 | | hideOptionMenu | (none) | (unknown) | | showOptionMenu | (none) | (unknown) | | closeWindow | (none) | 关闭当前网页窗口接口 | | hideMenuItems | menuList | 批量隐藏功能按钮接口 | | showMenuItems | menuList | 批量显示功能按钮接口 | | hideAllNonBaseMenuItem | (none) | 隐藏所有非基础按钮接口 | | showAllNonBaseMenuItem | (none) | 显示所有功能按钮接口 | | scanQRCode | needResult, scanType | 调起微信扫一扫接口 | | editAddress | (none) | 共享收货地址接口 | | openProductViewWithPid | pid, view_type, ext_info | 跳转微信商品页接口 | | batchAddCard | card_list | 批量添加卡券接口 | | chooseCard | app_id, location_id, sign_type, card_id, card_type, card_sign, time_stamp, nonce_str | 拉取适用卡券列表并获取用户选择信息 | | batchViewCard | card_list | 查看微信卡包中的卡券接口 | | consumedShareCard | consumedCardId, consumedCode | (unknown) | | getBrandWCPayRequest | timestamp, nonceStr, package, paySign, signType | 发起一个微信支付请求 | | getRecevieBizHongBaoRequest | timestamp, nonceStr, package, paySign, signType | (unknown) | | startMonitoringBeacons | ticket | 开启查找周边 ibeacon 设备接口 | | stopMonitoringBeacons | (none) | 关闭查找周边 ibeacon 设备接口 | | openEnterpriseChat | useridlist, chatname | (unknown) | | launchMiniProgram | targetAppId, path, envVersion | 打开小程序 | | openBusinessView | businessType, queryString, envVersion | (unknown) | | invokeMiniProgramAPI | name, arg | (unknown) |

Handlers for JS listening on WebView Bridge

| Handler Name | Official Description | | ----------------------- | --- | | menu:share:timeline | 监听“分享到朋友圈”按钮点击 | | menu:share:appmessage | 监听“分享给朋友”按钮点击 | | menu:share:qq | 监听“分享到 QQ”按钮点击 | | menu:share:weiboApp | 监听“分享到腾讯微博”按钮点击 | | menu:share:QZone | 监听“分享到 QQ 空间”按钮点击 | | onVoiceRecordEnd | 监听录音自动停止接口 | | onVoicePlayEnd | 监听语音播放完毕接口 | | onBeaconsInRange | 监听周边 ibeacon 设备接口 |

License

MIT