Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

插件相关 #4

Open
army8735 opened this issue Dec 10, 2017 · 0 comments
Open

插件相关 #4

army8735 opened this issue Dec 10, 2017 · 0 comments
Assignees
Labels

Comments

@army8735
Copy link
Member

army8735 commented Dec 10, 2017

jsBridge

源码

https://github.com/uyutech/android/blob/master/app/src/main/assets/h5_bridge.js

逻辑

  • 在webview加载页面时立刻注入此bridge.js
  • 已自动防重复,可多次注入
  • 每次h5调用时,均会在cosnole控制台log打印h5container.message: 开头的字符串,后面跟着json字符串数据,容器侦听console.log中符合此字符串开头的消息,解析json字符串做接下来操作
  • json字符串格式为
{
  'fn': 'string', // 调用的方法名,不同方法对应不同功能,也对应着相应的插件
  'clientId': 'string', // 每次调用的唯一id标示
  'param': 'jsonstring', // 调用的数据,可能为空或空字符串
  'cb': Function, // 无视之,回调参数
}

api

call(fn: String, param: *, cb: Function)

console控制台log打印js调用的信息,以便native侦听

trigger(name: String)

构造并触发name事件,并接受事件侦听回调的prevent回调值,再调用call方法并将prevent值作为param的一个参数,主要用在点击左上角返回时e.preventDefault()自定义接下来的动作

emit(name: String, param: *)

json解析param,并构造触发name事件,将param作为事件的data属性发出

_invokeJS:(clientId: String, resp: *)

回调js方法,此clientId对应每次js调用call执行native方法时其自动生成的唯一clientId

插件

android源码目录

https://github.com/uyutech/android/tree/master/app/src/main/java/cc/circling/plugin

AlbumPlugin

调用方式

jsBridge.album(data: Object = { num: int }, function(res: Object) {
  /*
   * data.num,选择照片数量限制
   * res.success = true/false,是否成功
   * res.cancel = true/false,是否用户取消
   * res.base64 = ['string'],返回的base64编码图片数据数组
   * res.message = 'string',报错时错误消息
   */
});

说明

打开相册,选择照片后返回图片base64编码数据数组。回调。

AlertPlugin

调用方式

jsBridge.alert('弹窗文字');

说明

alert弹窗信息,阻断型,有一个确定按钮点击消失。无回调。

BackPlugin

调用方式

jsBridge.back();

说明

js主动调用,也有可能是按了左上方的返回按钮,由native触发了一个back事件。此插件根据事件是否e.preventDefault()决定是否执行,执行的话先检查当前webview可否goBack(),可以的话回退相当于浏览器返回上一页,不能的话退出当前活动视图相当于浏览器关闭当前标签页。无回调。

ConfirmPlugin

调用方式

jsBridge.confirm(obj: Object = { title: String, message: String }, function(res) {
  // res = true / false 点击是确认还是取消
});

说明

title可能为空,message一定不为空,有确认和取消按钮,点击后回调。

DownloadPlugin

调用方式

jsBridge.download(obj: Object = { name: String, url: String });

说明

name可能下载存的文件名,url为http请求地址,下载会有系统下载消息及进度状态等,点击可取消下载。无回调。

GetPreferencePlugin

调用方式

jsBridge.getPreference(key: String, function(res: String) {
  // res为获取的值
});

说明

获取native本地存储的信息,对应有setPreference,js存储信息到本地,完成后回调。

HideBackButtonPlugin

调用方式

jsBridge.hideBackButton();

说明

隐藏左上角的返回按钮,对应还有showBackButton。无回调。

HideLoadingPlugin

调用方式

jsBridge.hideLoading();

说明

隐藏loading界面,对应还有showLoading。无回调。

HideOptionMenuPlugin

调用方式

jsBridge.hideOptionMenu();

说明

隐藏右上角选项,对应还有showOptionMenu。无回调。

LoginOutPlugin

调用方式

jsBridge.loginOut(function() {});

说明

删除当前session,同步native和webview;android为手动,ios为自动。登出后回调。

LoginWeiboPlugin

调用方式

jsBridge.loginWeibo(function(data: Object) {
  /*
   * data.success = true/false 是否成功
   * data.type = 0/1 没有成功时,取消/失败
   * data.message 没有成功的原因
   * data.openID 成功时微博返回的openID即userID
   * data.token 成功时微博返回的token
   */
});

说明

唤起登录微博,需接入微博sdk,openID和token参数在weiboLogin插件中有用到。完成后回调。

MoveTaskToBackPlugin

调用方式

jsBridge.moveTaskToBack();

说明

将当前应用程序收起到后台运行,显示回退到桌面,类似按下了Home键。无回调。

NetworkInfoPlugin

调用方式

jsBridge.networkInfo(function(data: Object) {
  /*
   * data.available = true/false 当前网络是否可用
   * data.wifi = true/false 当前是否是wifi网络
   */
});

说明

获取当前网络状况,将信息回调。

NotificationPlugin

调用方式

jsBridge.notify(data: Object, params: Object);

说明

data.ticker: String,顶部时间导航栏的通知简短显示文案,当无时取title;
data.title: String,下拉显示通知详情时的通知标题,可为空;
data.content: String,下拉显示通知详情时的内容;
data.url: String,点击通知后唤起应用程序,并用webview加载的url;
params,webview的参数key/value集合。
无回调。

OpenUriPlugin

调用方式

jsBridge.openUri(url: String);

说明

唤起系统浏览器打开url。无回调。

PopWindowPlugin

调用方式

jsBridge.popWindow(data: Object);

说明

类似按下左上角返回键,退出当前活动试图view,回到上一个活动,并将data参数传给上一个活动,上一个活动侦听resume事件能获取到这些参数。无回调。

PromptPlugin

调用方式

jsBridge.prompt(obj: Object, function(data: Object) {
  /*
   * obj.message 提示的问题自·文字
   * obj.value 输入框默认的内容
   * data.success = true/false 是否确认
   * data.value = 'string' 输入的文字
   */
});

说明

弹出一个系统输入对话框,消息为obj.message,有一行输入文字,默认内容obj.value,有确认和取消按钮,点击后回调。

PushWindowPlugin

调用方式

jsBridge.pushWindow(url: String, params: Object);

说明

新打开一个活动试图,webview加载url,且容器参数为params的key/value。无回调。

RefreshPlugin

调用方式

jsBridge.on('refresh', function(e) {
  e.preventDefault();
});

说明

容器下拉转圈刷新时,侦听refresh事件,当调用preventDefault()方法时,阻止原来的刷新,否则的话,为重新加载当前的webview,类似浏览器的刷新功能。

RefreshStatePlugin

调用方式

jsBridge.refreshState(state: Boolean);

说明

当前活动页面是否可用下拉刷新功能。无回调。

SetCookiePlugin

调用方式

jsBridge.setCookie(key: String, value: String/null, cb: Function);

说明

设置cookie,domain限制为当前页面的domain,path为/,当value为null时为删除。完成后回调。

SetOptionMenuPlugin

调用方式

jsBridge.setOptionMenu(data: Object);

说明

data.text,设置右上角选项的文字。无回调。

SetPreferencePlugin

调用方式

jsBridge.setPreference(key: String, value: String/null, cb: Function);

说明

存储key/value到native,当value为null时为删除,对应有getPreference,结束后回调。

SetSubTitlePlugin

调用方式

jsBridge.setSubTitle(subTitle: String);

说明

设置副标题文字。无回调。

SetTitleBgColorPlugin

调用方式

jsBridge.setTitleBgColor(color: String);

说明

设置标题背景色。无回调。

SetTitlePlugin

调用方式

jsBridge.setTitle(title: String);

说明

设置主标题文字。无回调。

ShowBackButtonPlugin

调用方式

jsBridge.showBackButton();

说明

显示回退按钮,对应有hideBackButton。无回调。

ShowLoadingPlugin

调用方式

jsBridge.showLoading(data: Object = { title: String, message: String, cancelable: Boolean});

说明

显示半透明loading加载信息,阻挡当前view操作,title可为空,cancelable是否可以取消关闭当前loading界面。无回调。

ShowOptionMenuPlugin

调用方式

jsBridge.showOptionMenu();

说明

显示右上角选项。无回调。

ToastPlugin

调用方式

jsBridge.toast(message: String);

说明

显示toast消息。无回调。

WeiboLoginPlugin

调用方式

jsBridge.weiboLogin(data: Object, function(res) {
  /*
   * res.success = true/false 登录成功/失败
   * res.userInfo 用户信息
   */
});

说明

将data中的key/value组成post参数形式,向http://circling.cc/h5/oauth/weibo 发起http请求,直接将返回结果传回js。

@army8735 army8735 self-assigned this Dec 10, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant