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

common-hybrid

v0.1.0

Published

hybrid技术框架常用协议

Downloads

5

Readme

简介

H5与app底层交互,以及协议常用协议。

底层协议的说明

说明:其URL地址是格式为:

schema://(tagname)?callback=xxx&param=encodeURIComponent({})

所有的协议都会有一个回调函数用来接受APP的回传过来的消息。

具体JSON格式如下:

{
    tagname: '', //协议的名称
    param: {},  //请求参数,会被Native使用
    callback: function (result) {} //Native处理成功后回调前端的方法,返回的result格式为:{success: true, error:{message: ''}, data:null}
}

使用

import commonHybrid from "common-hybrid";

// APP主动通知h5的回调函数
let commonFunction = function(dataInfo){
    if (dataInfo.tagname === "login") {
        // native 登录
        ...
    } else if (dataInfo.tagname === "logout") {
        // native 登出
        ...
    }
}

// hybrid的配置
let config = {
    // scheme 名称
    scheme: "www://",
    // 全局回调函数名称,需要要与APP的开发人员约定好名称
    webViewFunName: "hybridFun",
    // 回调函数前缀(前缀_随机数)
    callbackFunName: "callback"
}

let hybrid = commonHybrid(commonFunction, config);

常用的协议说明

1.forward 跳转

说明:协议的名称是:forward,表示当前H5的页面需要APP做跳转动作。

参数格式如下:

// 第一个参数表示跳转的相关参数
param: {
    topage: 'home', // 跳转的页面地址,如果跳转到native页可以是一个页面name, 相关的页面参数可以放在urlParam
    type: 'native', // 跳转方式,native表示H5跳Native,webview表示H5新开Webview跳转,最后装载H5页面,wxMinProgram:表示跳转小程序,需要传topage(页面地址)、wxAppOriginalId(小程序的原始ID)、wxVersionsType(小程序的版本类型,0:正式版 1:开发板 2:体验版)
    replace: false, // 是否关闭当前webview窗口
    wxAppOriginalId: "", // 小程序的原始ID(小程序独有)
    wxVersionsType: 0 // 小程序的版本类型,0:正式版 1:开发板 2:体验版(小程序独有)
    urlParam: {}, // 页面URL参数,比如:详情页加id
    ... // 其他参数
}
// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}

注意: 在H5跳转到APP的native原生页时,如果APP新打开webview内的H5页面认为该页面是原生native页,H5就会终止页面的渲染,通过forward协议跳转原生页面,带来的问题就是H5新打开的原生页返回时会看到之前H5终止渲染的那个页面(页面一片空白)。

这里的解决方案是可以考虑通过fromApp这个参数来判断是否是当前app新打开的H5页面,如果是该参数就为:true,当H5发现该参数为true的时候会把forward协议中的replace参数设置为true,这样APP跳转的时候会把当前webview给关闭掉。

这是一个临时解决方案,最好的解决方案就是app监控H5的URL跳转,如果当前URL跳转的页面是原生自己的页面就会直接拦截掉,显示出原生的页面。

2.back 返回

说明:协议的名称是:back,表示H5页面的返回,这里有可能返回到H5页面,也可能会返回到上一个原生页面。

参数格式如下:

// 第一个参数可以根据需要传入业务相关的参数(目前没有什么需要传的参数)
param: {
    ...
}

// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}
3.notice 通知

说明:H5 通知APP的事件。比如:H5登录、登出、数据有变动

参数格式如下:

// 第一个参数可以根据需要传入业务相关的参数(目前没有什么需要传的参数)
param: {
    actions: "login", // 通知消息的名称(比如:登录-login,登出-logout)
    data: "" // 通知消息的数据
}

// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}
4.share 分享

说明:APP内的H5页面做分享 参数格式如下:

// 第一个参数表示分享相关的信息
param: {
    type: "wxH5", // wxH5:微信分享H5页面, wxMinProgram:微信小程序, wxPoster: 微信海报(图片)
	title: "", // 标题
	desc: "", // 描述
	img: "", // 图片
	url: "", // 地址
	wxAppOriginalId: "", // 小程序的原始ID(小程序独有)
    wxVersionsType: 0, // 小程序的版本类型,0:正式版 1:开发板 2:体验版(小程序独有)
    defaultH5Url: "" // 如果当前微信版本太低不支持小程序就跳转到默认的H5地址(小程序独有)
}
// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}
5.setNativeData 更新native数据

说明:更新native数据,比如:修改本地的cookie、session信息,与notice的区别就是native更前端轻量级,notice更业务化

参数格式如下:

// 第一个参数表示更新native数据的信息
param: {
    actions: 更新native数据的动作名称
	data: 更新的数据
}
// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}
6.getNativeData 获取native数据

说明:获取native数据,比如:获取到本地的cookie、session信息、当前登录的用户信息

参数格式如下:

// 第一个参数表示获取native数据的信息
param: {
    actions: 获取native数据的动作名称
	data: 根据相关的参数获取native数据(可不传)
}
// 第二个参数表示回调函数(app会通过此函数返回数据)
callbackFun: function(data){

}
7.updateNavbarStatus 修改导航状态

说明:修改导航状态,是否显示顶部header、是否显示底部tabbar

参数格式如下:

// 第一个参数表示修改导航状态的信息
param: {
    isShowFoot: 是否显示底部导航栏
	isShowHead: 是否显示顶部 header
}
// 第二个参数表示APP调用协议成功后的回调函数(可不传)
callbackFun: function(){

}
8.downloadImage 图片下载(保存)

说明:在APP的H5的页面中去下载图片

参数格式如下:

// 第一个参数表示图片下载(保存)相关的信息
param: {
    imgUrl: 是否显示底部导航栏
}
// 第二个参数表示app下载图片是否正常的回调函数(可不传)
callbackFun: function(){

}
9.customer 自定义扩展协议

说明:自定义扩展协议,可以根据实际的业务需要扩展出自定义的协议

参数格式如下:

// 第一个参数表示协议名称信息
param: {
    imgUrl: 是否显示底部导航栏
}
// 第二个参数表示传给APP的相关参数
param: {
    ...
}
// 第三个参数表示调用协议后的回调函数
callbackFun: function(){

}
10.clearWebviewFun 清除webview下的所有回调函数(非协议)

说明:清除webview下的所有回调函数(非协议)

无需传参数

待考虑项

1.协议信息的安全机制,比如根据当前域名的白名单,或者协议信息的加密。

最后

  • 如果喜欢一定要 star哈!!!(谢谢!!)

  • 如果有意见和问题 请在 lssues提出,我会在线解答。