WebApp快捷打包
功能测试页 (包含所有 js SDK 接口的示例代码)
可以直接打包本网址体验测试各项功能

URL 控制参数

隐藏原生标题栏

转到

u.cshtml?xapp-navigation=0

u.cshtml#xapp-navigation=0

u.cshtml#xapp-navigation=0

显示原生标题栏

转到
//系统默认是显示原生标题栏的,你可以在“配置APP”页面的“原生标题栏”处设置默认显示或隐藏

u.cshtml

u.cshtml?xapp-navigation=1

u.cshtml#xapp-navigation=1

在本窗口中打开链接

转到

u.cshtml?xapp-target=self

在新窗口中打开链接

转到

u.cshtml?xapp-target=blank

在系统浏览器中打开链接

转到

u.cshtml?xapp-target=browser

隐藏分享按钮

转到

u.cshtml?xapp-share=0

显示分享按钮

转到

u.cshtml?xapp-share=1

自定义分享

转到

u.cshtml?xapp-share=1&xapp-share-title=%e7%99%be%e5%ba%a6%e6%89%8b%e6%9c%ba%e7%ab%99&xapp-share-url=https%3a%2f%2fm.baidu.com%2f&xapp-share-image=http%3a%2f%2fm.baidu.com%2fstatic%2findex%2fplus%2fplus_logo.png&xapp-share-description=%e8%bf%99%e6%98%af%e8%87%aa%e5%ae%9a%e4%b9%89%e6%91%98%e8%a6%81

禁用下拉刷新

转到

u.cshtml?xapp-refresh=0

启用下拉刷新

转到

u.cshtml?xapp-refresh=1

更多参数请参见 界面控制 setOptions js 接口说明

jsBridge.setOptions 的参数可以通过 URL QueryString 传递,用法请参考 setOptions js 接口说明。

判断网页是否在APP内打开

客户端中通过 js 判断

在浏览器客户端通过 javascript 代码判断;

客户端或服务器端都可通过检查 UserAgent 是否存在关键词 LT-APP 判断网页是否在APP内打开的;

if (/LT-APP/.test(navigator.userAgent)) {
  alert("在APP内");
} else {
  alert("不在APP内");
}

在服务器端判断

//php
$inApp = strpos($_SERVER['HTTP_USER_AGENT'], 'LT-APP');
if ($inApp) {
  //在APP中
}
//.net
bool inApp = (Request.UserAgent.IndexOf("LT-APP") >= 0);
if (inApp)
{
  //在APP中
}    
//java 
boolean inApp = (request.getHeader("User-Agent").indexOf("LT-APP") >= 0);
if (inApp)
{
  //在APP中
}
javascript sdk 接口 jsBridge

请在你需要使用 jsBridge 接口的页面引用,下载 js SDK jsbridge-v20191203.zip

一般情况下 jsBridge 会迅速完成初始化,如果需要在浏览器加载网页过程中调用 jsBridge 接口函数,你需要将代码放到 jsBridge.ready 的回调函数中。

jsBridge.ready(function () {
  //jsBridge.share();   //分享
  //jsBridge.wxPay();   //微信APP支付
  //jsBridge.aliPay();  //支付宝APP支付
  //...
});

属性

inApp

获取网页是否在APP中打开的

if (jsBridge.inApp) {
  alert("你正在APP中使用");
} else {    
  alert("不在APP中");
}

version

获取APP内核版本号

alert(jsBridge.version)

appVersion

获取APP打包版本号

//如 123 表示 1.2.3
alert(jsBridge.appVersion);

isRoot

获取当前页面是否在主窗口中( false 则为子窗口)

//true 主窗口, false 子窗口
//需在 jsBridge.isReady() 之后调用
alert(jsBridge.isRoot);

界面控制

setOptions 设置可选项

jsBridge.setOptions({
  //需要加载的链接
  url : '',
  //是否显示顶部标题栏, 不设置则用App配置
  showTitle: true,
  //顶部标题栏背景色, 不设置则用App配置
  titleColor: "#56BC94",
  //顶部标题栏文字, 不设置则用网页标题
  titleText: "Hello Web-Native App",
  //顶部标题栏文字颜色, 不设置则用App配置
  titleTextColor: "#FFFFFF",
  //是否全屏(隐藏顶部电池/信号状态栏), 不设置则用App配置
  fullScreen: false,
  //状态栏背景色, 不设置则用App配置
  statusBarColor: "#56BC94",
  //状态栏文字/图标是否显示为黑色, 不设置则用App配置
  statusBarBlackText: false,
  /**
  * 屏幕方向
  * 0 自适应(注意需取消手机方向锁定)
  * 1 横屏
  * 2 竖屏
  **/
  screenOrientation: 0,
  //是否启用下拉刷新
  refresh: false
});

setOptions 设置可选项 横屏并全屏

jsBridge.setOptions({
  showTitle : false,
  fullScreen: true,
  screenOrientation: 1
});

setOptions 设置可选项 切换为竖屏

jsBridge.setOptions({
  showTitle : true,
  fullScreen: false,
  screenOrientation: 2
});

setOptions 设置可选项 全屏显示

jsBridge.setOptions({
  showTitle : false,
  fullScreen: true
});

setOptions 设置可选项 退出全屏

jsBridge.setOptions({
  showTitle : true,
  fullScreen: false
});

setOptions 设置可选项 加载链接

jsBridge.setOptions({
  url: "https://m.baidu.com/"
});

setOptions 设置可选项 - 通过 URL 参数控制

转到

1. 给参数名加上 xapp- 前缀,添加到 URL 查询串可以起到跟调用 js 接口一样的效果;
2. URL 参数值需要进行 URLEncode UTF8 编码;
3. js 接口参数与 URL 参数只能用其一,js 优先;
4. 注意,这种方式只适用于在新窗口中打开的页面(你可以在链接中加上 xapp-target=blank 参数,强制页面在新窗口中打开);
示例链接:
u2.cshtml?xapp-target=blank&xapp-screenOrientation=1&xapp-fullScreen=true

open 在新窗口中打开(参数与 setOptions 方法相同)

//参数说明请参见 jsBridge.setOptions 方法
//二者的参数相同
jsBridge.open({    
  url : 'https://www.yimenapp.com/doc/u2.cshtml',
  showTitle: true
});

open 在新窗口中打开 全屏、横屏

//全屏并用横屏方式打开
jsBridge.open({
  url : 'https://www.yimenapp.com/doc/u2.cshtml',
  showTitle: false,
  fullScreen: true,
  screenOrientation: 1
});

open 在新窗口中打开 自适应横竖屏

//自适应横/竖屏方式打开
jsBridge.open({
  url : 'https://www.yimenapp.com/doc/u2.cshtml',
  showTitle: true,
  titleColor: "#FFFFFF",    
  titleTextColor: "#000000",    
  statusBarColor: "#FFFFFF",
  statusBarBlackText: true,
  screenOrientation: 0
});

openInBrowser 在浏览器中打开链接

jsBridge.openInBrowser('https://m.baidu.com');

action 显示功能按钮面板

//要显示的按钮数组
//如果未指定按钮,则以APP配置里勾选的按钮为准
//可直接执行 jsBridge.action();
var btns = [
  "ShareWxFriend",  //分享到微信好友
  "ShareWxTimeline",//分享到微信朋友圈
  "ShareQQFriend",  //分享到QQ好友
  "ShareQQZone",    //分享到QQ空间
  "ShareWeibo",     //分享到微博
  "ShareMenu",      //弹出分享菜单
  "CopyLink",       //复制链接
  "Back",           //后退
  "Forward",        //前进
  "Refresh",        //刷新
  "FullScreen",     //进入全屏/退出全屏    
  "Orientation",    //横竖屏切换
  "ClearCache",     //清除缓存
  "Scan",           //扫一扫
  "ShowImages",     //浏览图片
  "OpenInBrowser",  //在浏览器中打开
  "BackToHome",     //回到首页
  "Exit"            //退出APP
];
jsBridge.action(btns);

close 关闭窗口

转到
//需在子窗口中执行 close
//主窗口中执行 close 无效
//如需退出 APP 可以在任何地方执行 jsBridge.exit()
jsBridge.close();

close 关闭窗口,并在父窗口执行js代码

转到

关闭当前窗口,并在父窗口执行指定的 js 代码

jsBridge.close("alert('欢迎回到我这里~~\n' + location.href)");

onClose 当关闭当前窗口时触发

转到

当关闭当前窗口时执行指定的回调函数,回调函数返回 true / false 以指示是否允许关闭。

//需在子窗口中调用,主窗口中执行无效
jsBridge.onClose(function(appData){
  console.log(JSON.stringify(appData));
  if (confirm("确实要关闭吗?")) {
    return true;  //允许关闭
  } else {
    return false; //不关闭
  }
});

onBackPressed 当按后退键触发(仅Android)

转到

当Web窗口可后退(canGoBack)时,用户点按安卓后退键时触发,回调函数返回 true / false 以指示是否允许后退。

//当页面可后退时才会触发
//仅支持 Android
jsBridge.onBackPressed(function(appData){
  console.log(JSON.stringify(appData));
  if (confirm("确实要后退吗?")) {
    return true;  //允许后退
  } else {
    return false; //不允许
  }
});

evalInNavbar 导航栏控制

转到

1. 导航栏实际上是一个Web窗口,你可以在里面执行任意 js 语句;
2. 如未启用导航栏则不执行任何操作;

evalInToolbar 在工具栏中执行 js

1. 工具栏实际上是一个Web窗口,你可以在里面执行任意 js 语句; 2. 如未启用工具栏则不执行任何操作;

jsBridge.evalInToolbar("location.reload()");

launch 启动 URI 链接

转到

♦ 可以通过 URI Scheme 呼叫其他任何APP;
♦ 支持单个 URI,callback 回调返回成功与否;
♦ 支持多个 URI,APP会逐个尝试启动,直到成功启动一个 URI 链接为止,callback 回调返回成功的 URI 序号;

//单个 uri
jsBridge.launch("tel:10010", function(succ) {
  alert(succ ? "启动成功" : "启动失败");
});

//多个 uri
//按数组顺序尝试启动,遇到一个成功的则不再尝试后面的,
//回调返回成功的序号,-1表示全部没成功
jsBridge.launch([  // uri 数组
  "scheme1:xxx",
  "scheme2:xxx",
  "scheme3:xxx"
], function(index) {
  //成功启动的 uri 序号
  // -1 表示全部没成功
  alert(index);
});

action 显示APP配置里勾选的按钮面板

//显示APP配置里勾选的按钮面板
jsBridge.action();

onMenuAction 但点击更多按钮时触发

但点击更多按钮,显示功能按钮面板时触发。你可以调用这个方法指定显示哪些按钮。

//要显示的按钮数组
var btns = [
  "ShareWxFriend",  //分享到微信好友
  "ShareWxTimeline",//分享到微信朋友圈
  "CopyLink",       //复制链接
  "Refresh",        //刷新
  "OpenInBrowser"   //在浏览器中打开
];
jsBridge.onMenuAction(btns);
alert("已设置");

uiNavigation 显示/隐藏 顶部标题栏

//true 显示, false 隐藏    
window.bool1 = !window.bool1;
jsBridge.uiNavigation(bool1);

uiShare 显示/隐藏 分享按钮

//true 显示, false 隐藏
window.bool2 = !window.bool2;
jsBridge.uiShare(window.bool2);

uiActions 显示/隐藏 更多菜单按钮

//true 显示, false 隐藏    
window.bool3 = !window.bool3;
jsBridge.uiActions(bool3);

uiRefresh 启用/禁用 下拉刷新

//true 启用, false 禁用    
window.bool4 = !window.bool4;
jsBridge.uiRefresh(bool4);

侧滑边栏

侧滑边栏

转到

纯原生代码实现侧滑边栏,沉侵式设计,带来良好的用户体验。

网页截屏

captureWebPage 截屏网页快照

截屏当前浏览的网页快照,保存到相册。

jsBridge.captureWebPage({
  fullPage: false,
  share   : true
});

/*
参数说明:
{
  fullPage: //是否整页截屏(滚屏截图,长屏),布尔类型
  share   : //截屏后是否弹出分享,布尔类型
}
*/

captureWebPage 截屏网页快照(整页截屏,长图)

jsBridge.captureWebPage({
  fullPage: true,
  share   : true
});

长按(链接、图片)

长按(链接、图片)

转到

长按(链接、图片或带链接的图片)弹出操作菜单。

剪贴板

setClipboardText 设置剪贴板文本

设置剪贴板文本

var text = "Hello 世界 " + new Date().getTime();
jsBridge.setClipboardText(text);
alert("已复制到剪贴板");

getClipboardText 获取剪贴板文本

获取剪贴板文本

jsBridge.getClipboardText(function(text) {
  alert(text);
});

通讯录

contactOne 从通讯录中选择一个联系人

从通讯录中选择一个联系人,以 JSON 格式返回

jsBridge.contactOne(function(person) {
  if (person) {
    alert(JSON.stringify(person));
  } else {
    alert("已取消或没有使用通讯录的权限");
  }
});

/*
回调函数 person 参数说明:
{
  id        : "联系人编号",  //字符串
  name      : "姓名",        //字符串
  familyName: "姓",          //字符串
  givenName : "名",          //字符串
  phones    : [ "电话号码1", "电话号码2", ...], //字符串数组
  emails    : [ "电子邮箱1", "电子邮箱2", ...]  //字符串数组
}
*/

contactAll 获取通讯所有联系人

获取通讯所有联系人,以 JSON 数组格式返回

jsBridge.contactAll(function(persons) {
  if (persons) {
    alert("获取到" + persons.length + "个联系人信息\n第一个是\n" + JSON.stringify(persons[0]));
  } else {
    alert("没有使用通讯录的权限");
  }
});

/*
回调函数 persons 参数是 jsBridge.contactOne 返回的 persion 数组:
[ person, person, person, ...]
*/

微信、支付宝、银联、农行、工行支付

微信 URL快捷支付

转到

• 可以将如下参数 GET 或 POST 提交到 https://g.yimenyun.net/pay/ 发起支付

channel: 支付渠道, 0 微信, 1 支付宝, 2 银联

orderid: 订单号

title: 订单名称

amount: 支付金额(元)

url_succ: 支付成功后跳转的链接

url_fail: 支付失败跳转的链接

• 示例:
调用微信App完成名称为 购买VIP会员 的订单 S63711519824 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 UrlEncode UTF-8 编码;

https://g.yimenyun.net/pay/?channel=0&orderid=S63711519824&title=%e8%b4%ad%e4%b9%b0VIP%e4%bc%9a%e5%91%98&amount=0.01&url_succ=https%3A%2F%2Fm.baidu.com%2F&url_fail=https%3A%2F%2Fxw.qq.com%2F

pay 微信支付

channel 参数为 0 表示微信支付

jsBridge.pay({
  channel: 0, //0为微信支付, 1为支付宝, 2为银联
  orderid: new Date().getTime().toString(),
  title  : "购买VIP会员",
  amount : 0.01,
  attach : "aaaa"  //附加字段,通知时原样返回
}, function(succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

wxPay 微信支付

• 在你的服务器端使用 微信官方统一下单接口 获取 "预支付交易会话标识 prepay_id",再参考 调起支付接口 构造支付参数,交由此 js 函数发起支付;

• 此支付方式 不需要 配置机密信息(API密钥)到打包平台;

jsBridge.wxPay({
  appid    : "应用ID",
  partnerid: "商户号",
  prepayid : "预支付交易会话ID",
  package  : "扩展字段",
  noncestr : "随机字符串",
  timestamp: "时间戳(单位是秒,不是毫秒,切记)",
  sign     : "签名"
}, function (succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

支付宝 URL快捷支付

转到

• 可以将如下参数 GET 或 POST 提交到 https://g.yimenyun.net/pay/ 发起支付

channel: 支付渠道, 0 微信, 1 支付宝, 2 银联

orderid: 订单号

title: 订单名称

amount: 支付金额(元)

url_succ: 支付成功后跳转的链接

url_fail: 支付失败跳转的链接

• 示例:
调用支付宝App完成名称为 购买VIP会员 的订单 S63711519824 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 UrlEncode UTF-8 编码;

https://g.yimenyun.net/pay/?channel=1&orderid=S63711519824&title=%e8%b4%ad%e4%b9%b0VIP%e4%bc%9a%e5%91%98&amount=0.01&url_succ=https%3A%2F%2Fm.baidu.com%2F&url_fail=https%3A%2F%2Fxw.qq.com%2F

pay 支付宝支付

channel 参数为 1 表示支付宝

jsBridge.pay({
  channel: 1, //0为微信支付, 1为支付宝, 2为银联
  orderid: new Date().getTime().toString(),
  title  : "购买VIP会员",
  amount : 0.01,
  attach : "aaaa"  //附加字段,通知时原样返回
}, function(succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

aliPay 支付宝支付

• 在你的服务器端参考 支付宝官方请求参数说明 构造 "订单字符串",交由此 js 函数发起支付;

• 此支付方式 不需要 配置机密信息(私钥/公钥)到打包平台;

jsBridge.aliPay({
  orderString: "替换成你的订单字符串"
}, function (succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

银联 URL快捷支付

转到

• 可以将如下参数 GET 或 POST 提交到 https://g.yimenyun.net/pay/ 发起支付

channel: 支付渠道, 0 微信, 1 支付宝, 2 银联

orderid: 订单号

title: 订单名称

amount: 支付金额(元)

url_succ: 支付成功后跳转的链接

url_fail: 支付失败跳转的链接

• 示例:
调用支付宝App完成名称为 购买VIP会员 的订单 S63711519824 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 UrlEncode UTF-8 编码;

https://g.yimenyun.net/pay/?channel=2&orderid=S63711519824&title=%e8%b4%ad%e4%b9%b0VIP%e4%bc%9a%e5%91%98&amount=0.01&url_succ=https%3A%2F%2Fm.baidu.com%2F&url_fail=https%3A%2F%2Fxw.qq.com%2F

pay 银联支付

channel 参数为 2 表示银联

jsBridge.pay({
  channel: 2, //0为微信支付, 1为支付宝, 2为银联
  orderid: new Date().getTime().toString(),
  title  : "购买VIP会员",
  amount : 0.01
  //当前手机厂商 pay 类型,可选,仅支持安卓
  //用 jsBridge.unionSeInfo 函数获取
  //, seType : ""
}, function(succ, text) {
  if (succ) {
    alert("支付成功");
  } else {
    alert("支付失败或取消了支付");
  }
});

unionPay 银联支付(云闪付)

• 在你的服务器端使用 银联官方接口 获取 "银联受理订单号 tn",交由此 js 函数发起支付;

• 此支付方式 不需要 配置机密信息(pfx证书)到打包平台;

jsBridge.unionPay({
  tn: "替换成你的银联受理订单号"
  //用 jsBridge.unionSeInfo 函数获取到的当前手机厂商 pay 类型,可选(仅安卓,iOS始终忽略此参数)
  //, seType : ""
}, function (succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

unionSeInfo 获取银联手机厂商 pay 类型

获取银联手机厂商 pay 类型

jsBridge.unionSeInfo(function (succ, text) {
  if (succ) {
    alert("seType:" + text);
  } else {
    alert("error:" + text);
  }
});

unionPayAppInstalled 检查用户是否已安装银联闪付App

检查用户是否已安装银联闪付App

jsBridge.unionPayAppInstalled(function (yes) {
  alert(yes ? "已安装" : "未安装");
});

abcPay 农行掌上银行

• 农行掌上银行APP支付 SDK 的 js API 接口映射;

• 请参考农行官方手册调用服务器端接口获取支付订单号 token,交由此 js 接口发起App支付;

jsBridge.abcPay({
  token: "1111112222222233333"
}, function (succ, text) {
  if (succ) {
    alert("支付成功");
  } else {    
    alert("支付失败或取消了支付");
  }
});

abcPayAppInstalled 检查用户是否已安装农行掌银APP

检查用户是否已安装农行掌上银行APP

jsBridge.abcPayAppInstalled(function (yes) {
  alert(yes ? "已安装" : "未安装");
});

icbcPay 工商银行

• 工商银行APP支付 SDK 的 js API 接口映射;

• 请参考工行官方手册调用服务器端接口获取支付信息,交由此 js 接口发起App支付;

//注意,请使用 生产环境 参数
jsBridge.icbcPay({
  interfaceName   : "接口名",
  interfaceVersion: "接口版本号",
  tranData  : "交易信息",
  merSignMsg: "交易信息签名",
  merCert   : "商户公钥文件信息"
}, function (succ, text) {
  if (succ) {
    alert("支付成功:" + text);
  } else {    
    alert("支付失败或取消了支付:" + text);
  }
});

微信 登录、一次性订阅消息、拉起小程序;QQ 登录

wxAppInstalled 是否已安装微信客户端

检查设备是否已安装微信客户端

jsBridge.wxAppInstalled(function(yes){
  alert(yes ? "已安装" : "未安装");
});

wxLogin 微信登录 通过函数回调

通过js函数回调获取登录结果及授权参数

jsBridge.wxLogin(function(succ, ret) {
  if (succ) {    
    alert(JSON.stringify(ret));
  } else {
    alert("登录失败或取消了登录");
  }
});
/*
1. 登录成功的结果在 ret 中返回,是个 json 对象:
2. 如果你在打包平台填写了 微信AppSecret,APP会用授权码 code 去获取 openid, access_token 等信息,由于授权码 code 只能使用一次,所以你再用 code 去腾讯接口获取信息会失败;
3. 如果没有填写 微信AppSecret, ret 中只返回 code,你需要在服务器端用 code + 微信AppSecret 去腾讯接口获取信息;
{
  code:         //授权码,只能使用一次
  openid:       //如果在打包平台填写了 微信AppSecret 将返回此字段
  access_token: //如果在打包平台填写了 微信AppSecret 将返回此字段
  userinfo: {   //用户信息,如果在打包平台填写了 微信AppSecret 将返回此字段
    nickname: "xxx"
    //...
  }
}
*/

wxLogin 微信登录 通过网页回调

登录结果及授权参数将通过 URL Query 传到给你指定的链接

jsBridge.wxLogin("./u.cshtml");
/*
1. 登录成功后将授权码 code 等参数附加到 url 上跳转链接
2. url 参数请参见 微信登录 通过函数回调
u.cshtml?code=xxx&openid=xxx
*/

wxSubscribeMsg 微信一次性订阅消息

微信一次性订阅消息,请参考官方 说明1说明2

jsBridge.wxSubscribeMsg({
  template_id: "一次性订阅消息模板ID",
  scene      : 123  //订阅场景值
}, function(succ, data) {
  if (succ) {
    alert("成功\n" + JSON.stringify(data));
  } else {
    alert("失败\n" + JSON.stringify(data));
  }
});
/*
参数说明:
{
  template_id: //字符串类型,你在微信开放平台所申请移动应用的一次性订阅消息模板ID,请在微信开放平台上查看;
  scene      : //数字(0-10000之间),用来标识订阅场景值
}
-------------------
回调函数参数说明:
succ : //布尔类型,标识是否成功授权
data : //JSON 类型,授权成功时返回如下数据:
{
  openid     : //字符串,用户唯一标识
  template_id: //字符串,订阅消息模板ID
  scene      : //数字,订阅场景值
}
*/

wxLaunchMiniProgram 微信拉起小程序

微信拉起小程序,请参考官方 说明

jsBridge.wxLaunchMiniProgram({
  user_name: "小程序原始id",
  path     : "",
  type     : 0  //版本类型
}, function(succ, data) {
  if (succ) {
    alert("成功\n" + JSON.stringify(data));
  } else {
    alert("失败\n" + JSON.stringify(data));
  }
});
/*
参数说明:
{
  user_name: //字符串,小程序原始id,如 gh_d43f693ca31f
  path     : //字符串,拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"
  type     : //数字,小程序版本类型,0 正式版,1 开发版,2 体验版(默认 0)
}
-------------------
回调函数参数说明:
【注意,需要在小程序中点击 <button open-type="launchApp"> 拉起APP才会有回调通知,请参考 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html】
succ : //布尔类型,是否成功
data : //JSON 类型,成功时返回如下数据:
{
  ext_msg : //字符串,对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
}
*/

qqLogin QQ登录 通过函数回调

通过js函数回调获取登录结果及授权参数

jsBridge.qqLogin(function(succ, ret) {
  if (succ) {
    alert(JSON.stringify(ret));
  } else {
    alert("登录失败或取消了登录");
  }
});
/*
登录成功的结果在 ret 中返回,是个 json 对象:
{
  openid:       "wwwwwwwwwwwwwww",
  access_token: "aaaaaaaaaaaaaaa",
  userinfo: {       //用户资料
    nickname: "sssssss"
    //...
  }
}
*/

qqLogin QQ登录 通过网页回调

登录结果及授权参数将通过 URL Query 传到给你指定的链接

jsBridge.qqLogin("./u.cshtml");
/*
如果登录成功会跳转到链接
u.cshtml?openid=xxxx&access_token=xxxx&userinfo=xxxx
userinfo 参数是 JSON.stringify(userinfo) 的 URLEncode 编码
*/

微信、QQ 分享

share 分享网页

弹出分享菜单,用默认值分享

jsBridge.share();

share 分享网页 自定义标题

弹出分享菜单,用指定的标题分享,其他用默认值

jsBridge.share({
  title: "这是自定义分享标题(未指定则为网页标题)"
});

share 分享网页 直接分享

指定了 to 参数,不会弹出分享菜单,直接呼出对应的APP完成分享

jsBridge.share({
  //0 微信朋友圈
  //1 微信好友
  //2 QQ好友
  //3 QQ空间
  to    : 0,
  title : "可以指定标题",
  link  : "https://m.baidu.com",
  imgUrl: "http://s.yimenyun.net/sys/logo.png",
  desc  : "摘要:内事问百度,外事找谷歌,你懂的。"
});

onMenuShare... 设置自定义网页分享

点击原生标题栏上或功能面板上的分享按钮时调用,跟微信公众号内的分享接口用法相同。

参数为 JSON 数据类型

onMenuShareTimeline 当分享到微信朋友圈时
onMenuShareFriend 当分享到微信好友时
onMenuShareQQ 当分享到QQ好友时
onMenuShareQZone 当分享到QQ空间时

jsBridge.onMenuShareTimeline({
  title : "自定义的标题",
  link  : "https://www.yimenapp.com/doc/",
  imgUrl: "http://s.yimenyun.net/sys/logo.png",
  desc  : "自定义的摘要内容",
  success: function() {
    alert("分享成功");
  },
  cancel: function() {
    alert("取消了分享或分享失败");
  }
});
alert("已设置,请点击分享到朋友圈试试。");

onMenuShare... 自定义分享按钮点击事件

点击原生标题栏上或功能面板上的分享按钮时调用,注意参数为 function 函数。

参数为 function 函数

onMenuShareTimeline 当分享到微信朋友圈时
onMenuShareFriend 当分享到微信好友时
onMenuShareQQ 当分享到QQ好友时
onMenuShareQZone 当分享到QQ空间时

jsBridge.onMenuShareTimeline(function(){
  //这是点击分享到朋友圈时需要执行的函数
  //可以做分享网页、图片、文字、多图等任何事情
  alert("你点击了分享到微信朋友圈按钮");
});
alert("已设置,请点击分享到朋友圈试试。");

shareText 分享纯文字(仅支持微信)

分享纯文字到微信好友或微信朋友圈

结果回调 callback: function(succ) { }

jsBridge.shareText({
  //to: 0 微信朋友圈, 1 微信好友
  text: "纯文字分享...文本内容"
}, function(succ) {
  alert(succ ? "分享成功" : "分享失败");
});

shareImage 分享纯图片

分享纯图片,不支持QQ空间

结果回调请参考shareText

jsBridge.shareImage({
  //0 微信朋友圈
  //1 微信好友
  //2 QQ好友
  //to    : 0,
  imgUrl: "http://s.yimenyun.net/sys/1.jpg"
});

shareMusic 分享音乐(音频)

分享音乐(音频),不支持QQ空间

结果回调请参考shareText

jsBridge.shareMusic({
  //0 微信朋友圈
  //1 微信好友
  //2 QQ好友
  //to : 0,
  title: "音乐分享标题",
  desc : "可以写一点描述",
  //图片链接
  imgUrl: "http://s.yimenyun.net/sys/logo.png",
  //点击跳转的链接
  targetUrl: "https://m.baidu.com/",
  //音乐链接
  musicUrl: "http://zjdx1.sc.chinaz.com/Files/DownLoad/sound1/201708/9025.mp3"
});

shareVideo 分享视频(仅支持微信)

分享视频(仅支持微信)

结果回调请参考shareText

jsBridge.shareVideo({
  //0 微信朋友圈
  //1 微信好友
  //to : 0,
  title: "视频分享标题",
  desc : "可以写一点描述",
  //图片链接
  imgUrl: "http://s.yimenyun.net/sys/logo.png",
  //视频链接
  videoUrl: "http://flv3.people.com.cn/dev1/mvideo/vodfiles/2017/08/08/992bfdfef09d80e809cede9c9dd04916_c.mp4"
});

shareImages 一键多图分享朋友圈

一键分享多张图片到微信朋友圈(仅支持微信v6.7.3以下的版本)、QQ空间等

结果回调 callback: function(succ) { }

jsBridge.shareImages({
  text  : "这是一小段多图分享的说明文本\n https://m.baidu.com/",
  images: [
"http://s.yimenyun.net/sys/1.jpg",
"http://s.yimenyun.net/sys/2.jpg",
"http://s.yimenyun.net/sys/3.jpg",
"http://s.yimenyun.net/sys/4.jpg",
"http://s.yimenyun.net/sys/5.jpg",
"http://s.yimenyun.net/sys/6.jpg",
"http://s.yimenyun.net/sys/7.jpg",
"http://s.yimenyun.net/sys/8.jpg",
"http://s.yimenyun.net/sys/9.jpg"
]}, function(succ) {
  //仅苹果版支持回调分享结果
  if (succ) {
    alert("发送成功");
  } else {
    alert("失败或取消了");
  }
});

图片相关

showImages 多图(组图)浏览

多张组图浏览,支持横竖屏自适配、手势缩放、批量保存到相册、一键分享朋友圈;

可配置双击屏幕自动触发多图浏览,无需调用js接口。

jsBridge.showImages({
  //屏幕方向 0自适应,1横屏,2竖屏
  screenOrientation: 0,
  //显示保存到相册按钮
  save: true,
  //显示一键分享多图按钮
  share: true,
  //多图分享摘要文字
  share_text: "WebApp快捷打包 多图分享摘要",
  //当前页显示第几张(从0开始,默认0)
  startIndex: 2,
  //图片组, text 是文字说明
  items:[
{
  url :"http://s.yimenyun.net/sys/1.jpg",
  text:"美丽的大自然 01"
},
{
  url :"http://s.yimenyun.net/sys/2.jpg",
  text:"美丽的大自然 02"
},
{
  url :"http://s.yimenyun.net/sys/3.jpg"
},
{
  url :"http://s.yimenyun.net/sys/4.jpg"
},
{
  url :"http://s.yimenyun.net/sys/5.jpg"
},
{
  url :"http://s.yimenyun.net/sys/6.jpg",
  text:"美丽的湖泊"
},
{
  url :"http://s.yimenyun.net/sys/7.jpg"
}
  ]
});

saveImageToAlbum 保存图片到相册(URL链接)

指定图片链接,下载图片并保存到相册。

//以 http:// 或 https:// 打头的图片链接
jsBridge.saveImageToAlbum("http://s.yimenyun.net/sys/1.jpg", function(succ) {
  alert(succ ? "保存成功" : "保存失败:下载失败或没有相册使用权限");
});

saveImageToAlbum 保存图片到相册(图片 Base64 URL)

保存图片 Base64 URL 到相册。

//图片 Base64 URL
jsBridge.saveImageToAlbum("data:image/png;base64,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", function(succ) {
  alert(succ ? "保存成功" : "保存失败:转码失败或没有相册使用权限");
});

saveImageToAlbum 保存图片到相册(图片 Base64 内容)

保存图片 Base64 内容到相册。

//图片 Base64 内容
jsBridge.saveImageToAlbum("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", function(succ) {
  alert(succ ? "保存成功" : "保存失败:转码失败或没有相册使用权限");
});

saveImagesToAlbum 批量保存图片到相册

批量保存图片到相册。


//图片链接或Base64图片数组
jsBridge.saveImagesToAlbum([
  "http://s.yimenyun.net/sys/1.jpg",
  "http://s.yimenyun.net/sys/2.jpg",
  "http://s.yimenyun.net/sys/3.jpg",
  "http://s.yimenyun.net/sys/4.jpg",
  "http://s.yimenyun.net/sys/5.jpg"
], function(succ) {
  if (succ) {
    jsBridge.toast("已保存");
  } else {
    alert("保存失败:下载失败或没有相册使用权限");
  }
});

saveScreenshotToAlbum 保存 Web 截屏图片到相册

保存 Web 截屏图片到相册(仅截取 Web 浏览窗口)。

jsBridge.saveScreenshotToAlbum(function(succ) {
  alert(succ ? "保存成功" : "保存失败:没有相册使用权限");
});

扫一扫

scan 扫一扫,APP自动处理扫码结果

扫一扫,支持二维码/条码,APP自动处理扫码结果

jsBridge.scan();

scan 扫一扫,自己处理扫码结果

扫一扫,支持二维码/条码,自己处理扫码结果

jsBridge.scan({
  needResult: true
}, function(code) {
  if (code) {
    alert(code);
  } else {
    alert("扫码失败或取消了扫码");
  }
});

scanFromAlbum 从相册选图识别二维码

从相册选图识别二维码,APP自动处理识别结果

jsBridge.scanFromAlbum();

scanFromAlbum 从相册选图识别二维码

从相册选图识别二维码,自己处理识别结果

jsBridge.scanFromAlbum({
  needResult: true
}, function(code) {
  if (code) {
    alert(code);
  } else {
    alert("识别二维码失败或取消了识别");
  }
});

scanFromUrl 从图片链接识别二维码

从图片链接识别二维码,APP自动处理识别结果

jsBridge.scanFromUrl({
  imageUrl: "http://s.yimenyun.net/sys/qr.png"
});

scanFromUrl 从图片链接识别二维码

从图片链接识别二维码,自己处理识别结果

jsBridge.scanFromUrl({
  imageUrl  : "http://s.yimenyun.net/sys/qr.png",
  needResult: true
}, function(code) {
  if (code) {
    alert(code);
  } else {
    alert("识别二维码失败");
  }
});

缓存

cacheSize 获取缓存大小

获取缓存大小

jsBridge.cacheSize(function(size) {
  var txt = size + "字节\n";
  txt += (size / 1024 / 1024.0).toFixed(2) + "MB";
  alert(txt);   
});

clearCache 清除缓存

清除缓存

jsBridge.clearCache(function() {
  alert("缓存已清除");
});

安全(设备所有者验证 FaceID/TouchID)

deviceOwnerAuthAvailable 验证是否可用

检查设备所有者验证 FaceID/TouchID(面部/指纹验证)功能是否可用

iOS 版可以在 “苹果(iOS)设置” FaceID 隐私权限说明
(1).需要设置并开启手机密码;
(1).在某些苹果机型上没有 TouchID,取而代之的是 FaceID,你可以在 “苹果(iOS)设置” 填写自定义申请 FaceID 隐私权限的说明。

Android 端注意事项
(1).设备上要有支持指纹识别的硬件和Android 6.0 及以上;
(2).设备需要启用锁屏保护,可以是密码,PIN码或者图案都可以;
(3).用户必须在系统设置中录入至少一个指纹;
(4).指纹识别的失败次数因手机厂商不同可能会不同,失败次数过多,请稍后再试,在锁定时间内是不可以进行指纹识别的。

jsBridge.deviceOwnerAuthAvailable(function(yes) {
  alert(yes ? "可用" : "不可用");   
});

deviceOwnerAuth 启动 FaceID/TouchID 验证

启动设备所有者验证 FaceID/TouchID(面部/指纹验证)

jsBridge.deviceOwnerAuth({
  //提示文字,用来向用户说明使用指纹验证的目的
  reason: "验证指纹以确认您的身份",
  //指纹验证失败时,右侧按钮文字,默认为“输入密码”
  fallbackTitle: "输入密码"
}, function(succ) {
  //验证失败包括 设备不支持指纹验证/失败次数过多被锁定/用户取消了验证
  alert(succ ? "验证成功" : "验证失败");
});

前进/后退

canGoForward 浏览记录是否可以前进

检查是否可以执行 history.forward()

jsBridge.canGoForward(function(can){
  alert(can);
});

canGoBack 浏览记录是否可以后退

检查是否可以执行 history.back()

jsBridge.canGoBack(function(can){
  alert(can);
});

backToHome 一键返回首页

一键返回首页,无论当前处于多少层级的子页面。

// 参数 true: 同时跳转到首页链接, false: 不跳转链接
jsBridge.backToHome(true);

消息推送/通知

极光 jiguang.cn

转到

个推 getui.com

转到

个推官网 https://www.getui.com/

通知设置

转到

通知设置

百度开放平台

百度地理定位

转到

百度地理定位

百度AI - 文字识别

转到

百度AI - 文字识别

百度AI - 人脸识别

转到

百度AI - 人脸识别

APP 信息

appSettings 跳转到APP设置

跳转到APP设置界面

jsBridge.appSettings();

appInfo 获取APP信息

获取APP安装ID,升级安装不会变,卸载APP重新安装会改变。

jsBridge.appInfo(function(info){
  //返回json类型
  /**
  {
    appId       :123, //打包平台 APP ID
    appVer      :101, //版本号
    appName     :"APP名称",
    url         :"http://...打包网址",
    packageName :"com.xxx.yyy", //包名
    platformVer :26,  //平台版本号    
    deviceName  :"设备名称",
    deviceId    :"设备ID,卸载APP重装不变",
    installId   :"安装ID,卸载APP重装会变",
    certMD5     :"应用MD5签名,仅安卓端",
    certSHA1    :"应用SHA1签名,仅安卓端"
  }
  **/
  alert(JSON.stringify(info));
});

appInfo 在页面中查看

转到

获取APP信息并展示出来

getIMEI 获取移动设备识别码 IMEI/MEID

• 获取移动设备识别码 IMEI/MEID,需要 READ_PHONE_STATE 隐私权限;

• 多个 IMEI/MEID 用逗号(,)分隔,拨号输入 *#06# 可查看;

• Android 10+ 不能获取 IMEI,此接口返回 Android Id;

• 仅支持安卓,苹果版推荐使用 getIDFA。

jsBridge.getIMEI(function(imei){
  if (imei) {
    alert(imei);
  } else {
    alert("获取失败或没有权限");
  }
});

getOAID 获取开放广告标识符 OAID

• 详情请参考 移动安全联盟 官方说明;

• 除了各厂家较老的安卓系统基本都支持,可配合 getIMEI 使用;

• 仅支持安卓,苹果版推荐使用 getIDFA。

jsBridge.getOAID(function(oaid){
  if (oaid) {
    alert(oaid);
  } else {
    alert("获取失败或此设备不支持");
  }
});

getIDFA 获取广告标识符 IDFA

• 获取广告标识符 IDFA;

• 设置 - 隐私 - 广告:
1. 启用了 “限制广告跟踪” 则无法获取;
2. 启用 “限制广告跟踪” 后重新关闭,IDFA 会改变;
3. “还原广告标识符” 后 IDFA 会改变;

• 仅支持苹果,安卓版推荐使用 getIMEI。

jsBridge.getIDFA(function(idfa){
  if (idfa) {
    alert(idfa);
  } else {
    alert("已启用 限制广告跟踪");
  }
});

getDeviceId 获取设备ID

获取设备ID,此ID不会随APP安装或重装发生变化。

jsBridge.getDeviceId(function(id){
  alert(id);
});

getInstallId 获取APP安装ID

获取APP安装ID,升级安装不会变,卸载APP重新安装会改变。

jsBridge.getInstallId(function(id){
  alert(id);
});

onAppEnterBackground 当App被推到后台时

用户按主屏HOME键,有电话拨入等, App被推到后台时触发。

jsBridge.onAppEnterBackground(function(){
  console.log("enter background");
});
alert("已设置,请按主屏HOME键再打开App。");

onAppEnterForeground 当App被激活到前台时

当App被激活,回到前台时触发。

jsBridge.onAppEnterForeground(function(){
  alert("enter foreground~~")
});
alert("已设置,请按主屏HOME键切换App。");

Andriod X5 内核

Andriod X5 内核

转到

需购买并启用 X5内核 才能正常使用

阅读文档 pdf/doc/xls/ppt 等文件

阅读文档

转到

需购买本插件才能正常使用

阿里百川

阿里百川 baichuan.taobao.com

转到

阿里巴巴无线开放平台 baichuan.taobao.com

电商服务(百川电商SDK)

新浪微博

新浪微博 open.weibo.com

转到

新浪微博开放平台 open.weibo.com

传感器

加速度 Accelerometer

转到

加速计传感器

陀螺仪 Gyroscope

转到

陀螺仪又叫角速度传感器

iOS内购(In-App Purchase)

iOS内购(In-App Purchase)

转到

由于苹果APP上架审核政策限制,要求某些类型的APP内购买功能必须接入 IAP。

多屏异显

多屏异显

转到

本 js API 为多屏幕安卓设备提供支持

视频播放器

视频播放器

转到

原生视频播放器,支持mp4, hls(m3u8), flv点播,hls(m3u8), rtmp, flv直播。

原生网络请求

原生网络请求

转到

原生网络请求,高性能,也不会有 ajax 跨域限制问题

融云音视频通话

融云音视频通话

转到

参考官方说明 https://www.rongcloud.cn/product/call

其他

toast 消息提示

jsBridge.toast('Hello, App.');

requestPermissions 请求隐私权限

//请求 相机、写相册 权限
jsBridge.requestPermissions([ "Camera", "WritePhotos" ], function(result) {
  if (result.granted) {
    alert("已授权");
  } else {
    alert("已拒绝,不再询问: " + result.neverAskAgain);
  }
});

/*
参数说明:
权限,字符串数组,一次可以申请单个或多个权限:
ReadPhotos     读取相册
WritePhotos    写入相册
Camera         相机
Microphone     麦克风
Location       定位
ReadContacts   读取联系人
WriteContacts  写入联系人
BlueTooth      蓝牙
ReadPhoneState 手机设备信息(仅支持安卓)

回调函数 result 参数说明:
{
  granted      : 布尔类型,是否已获得请求的全部权限
  neverAskAgain: 布尔类型,如果拒绝了,用户是否勾选了 “不再询问”
}
注意:如果 neverAskAgain == true ,再次 requestPermissions 请求隐私权限时 App 不会弹出授权提示框,此时你需要提示用户进入手机系统设置手动开启权限。调用 jsBridge.appSettings() 可以直接打开本 App 的系统设置界面。

*/

requestPermissions 请求隐私权限 示例二

//请求定位权限
jsBridge.requestPermissions([ "Location" ], function(result) {
  if (result.granted) {
    alert("已授权");
  } else {
    alert("未授权,不再询问: " + result.neverAskAgain);
  }
});

checkCamera 检测摄像头

获取设备配置的摄像头数量和类型

jsBridge.checkCamera(function (result) {
  alert(JSON.stringify(result));
});
/*
result 返回参数:
{
  count:  //摄像头数量,int 类型
  front:  //是否有前置摄像头,bool 类型
  back :  //是否有后置摄像头,bool 类型
}
*/

userAgreement 用户协议与隐私申明

需选购并打包 “用户协议” 插件,支持简体中文/繁体中文和英文版,可设置为第一次打开App自动弹出用户协议,“同意” 继续使用App,“拒绝” 则退出App;也可以调用 userAgreement js 函数呼出此窗口。

//显示 用户协议与隐私申明 窗口
jsBridge.userAgreement();

vibrate 震动

jsBridge.vibrate();

exit 退出APP

jsBridge.exit();

net 网络访问请求

发起网络访问请求,原生网络请求,性能高,也不会有 ajax 跨域限制问题

jsBridge.net({
  url: "https://www.yimenapp.com/doc/echo.cshtml",
  method: "POST",
  params: {
    name: "World"
  },
  indicator: true
}, function (succ, text) {
  if (succ) {
    alert("服务器返回的字符串\n\n" + text);
  } else {
    alert("网络访问请求失败");
  }
});
拍照上传
长按
地理定位
FORM 表单
Menu