敬告:此 demo 演示为开放测试页面,仅用于开发者快速测试体验应用功能,请严格遵守开发者协议,九游会j9备用网址-j9九游会登录入口首页新版。
♦ js-sdk 引用方式:
♦ 普通网页 script 方式加载:下载最新版 ,请在页面上调用 jsbridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge
u.cshtml
u.cshtml?xapp-navigation=1
u.cshtml#xapp-navigation=1
u.cshtml?xapp-share=1&xapp-share-title=百度手机站&xapp-share-url=https://m.baidu.com/&xapp-share-image=http://m.baidu.com/static/index/plus/plus_logo.png&xapp-share-description=这是自定义摘要
jsbridge.setoptions 的参数可以通过 url querystring 传递,用法请参考 setoptions 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中 }
属性
获取网页是否在app中打开的
if (jsbridge.inapp) { alert("你正在app中使用"); } else { alert("不在app中"); }
获取app内核版本号
alert(jsbridge.version)
获取app打包版本号
//数字版本号,如 100 alert(jsbridge.appversion);
获取当前页面是否在主窗口中( false 则为子窗口)
//true 主窗口, false 子窗口 //需在 jsbridge.isready() 之后调用 alert(jsbridge.isroot);
界面控制
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 });
jsbridge.setoptions({ showtitle : false, fullscreen: true, screenorientation: 1 });
jsbridge.setoptions({ showtitle : true, fullscreen: false, screenorientation: 2 });
jsbridge.setoptions({ showtitle : true, fullscreen: false, screenorientation: 2 });
jsbridge.setoptions({ showtitle : false, fullscreen: true });
jsbridge.setoptions({ showtitle : true, fullscreen: false });
jsbridge.setoptions({ url: "https://m.baidu.com/" });
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
//参数说明请参见 jsbridge.setoptions 方法 //二者的参数相同 jsbridge.open({ url : 'https://www.yimenapp.com/doc/u2.cshtml', showtitle: true });
//全屏并用横屏方式打开 jsbridge.open({ url : 'https://www.yimenapp.com/doc/u2.cshtml', showtitle: false, fullscreen: true, screenorientation: 1 });
//自适应横/竖屏方式打开 jsbridge.open({ url : 'https://www.yimenapp.com/doc/u2.cshtml', showtitle: true, titlecolor: "#ffffff", titletextcolor: "#000000", statusbarcolor: "#ffffff", statusbarblacktext: true, screenorientation: 0 });
jsbridge.openinbrowser('https://m.baidu.com');
//需在子窗口中执行 close //主窗口中执行 close 无效 //如需退出 app 可以在任何地方执行 jsbridge.exit() jsbridge.close();
关闭当前窗口,并在父窗口执行指定的 js 代码
jsbridge.close("alert('欢迎回到我这里~~\n' location.href)");
当关闭当前窗口时执行指定的回调函数,回调函数返回 true / false 以指示是否允许关闭。
//需在子窗口中调用,主窗口中执行无效 jsbridge.onclose(function(appdata){ console.log(json.stringify(appdata)); if (confirm("确实要关闭吗?")) { return true; //允许关闭 } else { return false; //不关闭 } });
当web窗口可后退(cangoback)时,用户点按安卓后退键时触发,回调函数返回 true / false 以指示是否允许后退。
//当页面可后退时才会触发 //仅支持 android jsbridge.onbackpressed(function(appdata){ console.log(json.stringify(appdata)); if (confirm("确实要后退吗?")) { return true; //允许后退 } else { return false; //不允许 } });
1. 工具栏实际上是一个web窗口,你可以在里面执行任意 js 语句; 2. 如未启用工具栏则不执行任何操作;
jsbridge.evalintoolbar("location.reload()");
♦ 可以通过 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); });
jsbridge.actionbutton({ //true 显示, false 隐藏 visible: (window.bool0 = !window.bool0) });
//显示app配置里勾选的按钮面板 jsbridge.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", //回到九游会j9备用网址首页 "exit" //退出app ]; jsbridge.action(btns);
但点击更多按钮,显示功能按钮面板时触发。你可以调用这个方法指定显示哪些按钮。
//要显示的按钮数组 var btns = [ "sharewxfriend", //分享到微信好友 "sharewxtimeline",//分享到微信朋友圈 "copylink", //复制链接 "refresh", //刷新 "openinbrowser" //在浏览器中打开 ]; jsbridge.onmenuaction(btns); alert("已设置");
//true 显示, false 隐藏 window.bool1 = !window.bool1; jsbridge.uinavigation(bool1);
//true 显示, false 隐藏 window.bool2 = !window.bool2; jsbridge.uishare(window.bool2);
//true 显示, false 隐藏 window.bool3 = !window.bool3; jsbridge.uiactions(bool3);
//true 启用, false 禁用 window.bool4 = !window.bool4; jsbridge.uirefresh(bool4);
侧滑边栏
网页截屏
//保存到相册 jsbridge.capturewebpage({ //是否整页截屏(滚屏截图,长屏) fullpage : false, //截屏后是否弹出分享 share : true, //是否将图片以 jpg base64 格式返回, 默认 false //false 保存到相册 //true 以 base64 格式返回 needresult: false });
//返回 jpg base64 jsbridge.capturewebpage({ needresult: true }, function(success, res) { console.log(res.base64); if (res.base64) { alert("成功,base64 字符数量 " res.base64.length); } });
jsbridge.capturewebpage({ fullpage: true, share : true });
长按(链接、图片)
剪贴板
设置剪贴板文本
var text = "hello 世界 " new date().gettime(); jsbridge.setclipboardtext(text); alert("已复制到剪贴板");
获取剪贴板文本
jsbridge.getclipboardtext(function(text) { alert(text); });
文件系统与sqlite数据库
微信、支付宝、银联、农行、工行、中信支付
• 可以将如下参数 get 或 post 提交到 https://g.yimenyun.net/pay/ 发起支付
• channel: 支付渠道, 0 微信, 1 支付宝, 2 银联云闪付
• orderid: 订单号
• title: 订单名称
• amount: 支付金额(元)
• url_succ: 支付成功后跳转的链接
• url_fail: 支付失败跳转的链接
• 示例:
调用微信app完成名称为 购买vip会员 的订单 s63841308209 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 urlencode utf-8 编码;
https://g.yimenyun.net/pay/?channel=0&orderid=s63841308209&title=购买vip会员&amount=0.01&url_succ=https://m.baidu.com/&url_fail=https://xw.qq.com/
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("支付失败或取消了支付\n" text); } });
• 在你的服务器端使用 获取 "预支付交易会话标识 prepay_id",再参考 构造支付参数,交由此 js 函数发起支付;
• 此j9九游会登录入口首页新版的支付方式 不需要 配置机密信息(api密钥)到打包平台;
jsbridge.wxpay({ appid : "应用id", partnerid: "商户号", prepayid : "预支付交易会话id", package : "扩展字段", noncestr : "随机字符串", timestamp: "时间戳(单位是秒,不是毫秒,切记)", sign : "签名" }, function (succ, text) { if (succ) { alert("支付成功"); } else { alert("支付失败或取消了支付\n" text); } });
• 可以将如下参数 get 或 post 提交到 https://g.yimenyun.net/pay/ 发起支付
• channel: 支付渠道, 0 微信, 1 支付宝, 2 银联云闪付
• orderid: 订单号
• title: 订单名称
• amount: 支付金额(元)
• url_succ: 支付成功后跳转的链接
• url_fail: 支付失败跳转的链接
• 示例:
调用支付宝app完成名称为 购买vip会员 的订单 s63841308209 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 urlencode utf-8 编码;
https://g.yimenyun.net/pay/?channel=1&orderid=s63841308209&title=购买vip会员&amount=0.01&url_succ=https://m.baidu.com/&url_fail=https://xw.qq.com/
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("支付失败或取消了支付"); } });
• 在你的服务器端参考 构造 "订单字符串",交由此 js 函数发起支付;
• 此j9九游会登录入口首页新版的支付方式 不需要 配置机密信息(私钥/公钥)到打包平台;
orderstring:
jsbridge.alipay({ orderstring: $("#alipay").val() }, function (succ, text) { if (succ) { alert("支付成功"); } else { alert("支付失败或取消了支付"); } });
• 可以将如下参数 get 或 post 提交到 https://g.yimenyun.net/pay/ 发起支付
• channel: 支付渠道, 0 微信, 1 支付宝, 2 银联云闪付
• orderid: 订单号
• title: 订单名称
• amount: 支付金额(元)
• url_succ: 支付成功后跳转的链接
• url_fail: 支付失败跳转的链接
• 示例:
调用银联云闪付app完成名称为 购买vip会员 的订单 s63841308209 0.01元支付;
支付成功跳转到https://m.baidu.com/,失败跳转到 https://xw.qq.com/;
注意,要对各参数进行 urlencode utf-8 编码;
https://g.yimenyun.net/pay/?channel=2&orderid=s63841308209&title=购买vip会员&amount=0.01&url_succ=https://m.baidu.com/&url_fail=https://xw.qq.com/
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("支付失败或取消了支付"); } });
• 在你的服务器端使用 获取 "银联受理订单号 tn",交由此 js 函数发起支付;
• 此j9九游会登录入口首页新版的支付方式 不需要 配置机密信息(pfx证书)到打包平台;
jsbridge.unionpay({ tn: "替换成你的银联受理订单号" //用 jsbridge.unionseinfo 函数获取到的当前手机厂商 pay 类型,可选(仅安卓,ios始终忽略此参数) //, setype : "" }, function (succ, text) { if (succ) { alert("支付成功"); } else { alert("支付失败或取消了支付"); } });
获取银联手机厂商 pay 类型
jsbridge.unionseinfo(function (succ, text) { if (succ) { alert("setype:" text); } else { alert("error:" text); } });
检查用户是否已安装银联闪付app
jsbridge.unionpayappinstalled(function (yes) { alert(yes ? "已安装" : "未安装"); });
• 农行掌上银行app支付 sdk 的 js api 接口映射;
• 请参考农行官方手册调用服务器端接口获取支付订单号 token,交由此 js 接口发起app支付;
jsbridge.abcpay({ token: "1111112222222233333" }, function (succ, text) { if (succ) { alert("支付成功"); } else { alert("支付失败或取消了支付"); } });
检查用户是否已安装农行掌上银行app
jsbridge.abcpayappinstalled(function (yes) { alert(yes ? "已安装" : "未安装"); });
• 工商银行app支付 sdk 的 js api 接口映射;
• 请参考工行官方手册调用服务器端接口获取支付信息,交由此 js 接口发起app支付;
//注意,请使用 生产环境 参数 jsbridge.icbcpay({ interfacename : "接口名", interfaceversion: "接口版本号", trandata : "交易信息", mersignmsg: "交易信息签名", mercert : "商户公钥文件信息" }, function (succ, text) { if (succ) { alert("支付成功:" text); } else { alert("支付失败或取消了支付:" text); } });
微信/qq/支付宝 登录;微信一次性订阅消息、拉起小程序;
检查设备是否已安装微信客户端
jsbridge.wxappinstalled(function(yes){ alert(yes ? "已安装" : "未安装"); });
通过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" //... } } */
登录结果及授权参数将通过 url query 传到给你指定的链接
jsbridge.wxlogin("./u.cshtml"); /* 1. 登录成功后将授权码 code 等参数附加到 url 上跳转链接 2. url 参数请参见 微信登录 通过函数回调 u.cshtml?code=xxx&openid=xxx */
微信一次性订阅消息,请参考官方 ,。
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 : //数字,订阅场景值 } */
拉起微信小程序,请参考官方 。
user_name:
path:
type:
jsbridge.wxlaunchminiprogram({ user_name: "{{wxlaunchminiprogram.user_name}}", path : "{{wxlaunchminiprogram.path}}", type : {{wxlaunchminiprogram.type}} //版本类型 }, function(succ, data) { if (succ) { alert("成功\n" json.stringify(data)); } else { alert("失败\n" json.stringify(data)); } }); /* 参数说明: { user_name: //字符串,小程序原始id,如 gh_d43f693ca31f path : //字符串,拉起小程序页面的可带参路径,不填默认拉起小程序九游会j9备用网址首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar" type : //数字,小程序版本类型,0 正式版,1 开发版,2 体验版(默认 0) } ------------------- 回调函数参数说明: 【注意,需要在小程序中点击
拉起微信客服,请参考官方 。
corpid:
url:
jsbridge.wxopencustomerservicechat({ //必须,字符串类型,企业id corpid: "{{wxopencustomerservicechat.corpid}}", //必须,字符串类型,客服链接 url : "{{wxopencustomerservicechat.url}}" }, function(succ, data) { if (succ) { alert("成功\n" json.stringify(data)); } else { alert("失败\n" json.stringify(data)); } });
通过js函数回调获取登录结果及授权参数
jsbridge.qqlogin(function(succ, ret) { if (succ) { alert(json.stringify(ret)); } else { alert("登录失败或取消了登录"); } }); /* 登录成功的结果在 ret 中返回,是个 json 对象: { openid: "wwwwwwwwwwwwwww", access_token: "aaaaaaaaaaaaaaa", userinfo: { //用户资料 nickname: "sssssss" //... } } */
登录结果及授权参数将通过 url query 传到给你指定的链接
jsbridge.qqlogin("./u.cshtml"); /* 如果登录成功会跳转到链接 u.cshtml?openid=xxxx&access_token=xxxx&userinfo=xxxx userinfo 参数是 json.stringify(userinfo) 的 urlencode 编码 */
发起支付宝app登录
authinfo:
jsbridge.alipaylogin({ //必须,字符串类型, authinfo: "{{alipaylogin.authinfo}}" }, function(succ, result) { if (succ) { alert(json.stringify(result)); } else { alert("登录失败或取消了登录\n" json.stringify(result)); } }); /* 回调参数 succ 为 true 表示授权成功,result 示例: { resultstatus: "9000", result: "success=true&auth_code=d9d1b5acc26e461dbfcb6974c8ff5e64&result_code=200&user_id=2088003646494707", memo : "" } • result 即为授权信息,请提交到您的服务器,调用支付宝服务器端接口获取 access_token 和用户信息,服务器端sdk:https://opendocs.alipay.com/open/00y8k9 ; • resultstatus 状态码说明:https://opendocs.alipay.com/open/218/105327#状态码 result_status 说明 */
分享
//调用安卓/ios系统自带分享,无需配置打包微信、qq等插件 //分享文件请使用 文件系统插件的 fs.share 接口 jsbridge.sysshare({ //可选,弹窗标题 //仅用于android,部分设备可能不会显示标题 title: "发现一个好东西", //必须,分享内容,应提供 text 或 images 之一 content: { //文本 text: "分享一段文本内容" } }, function(succ, res) { if (!succ) { alert(json.stringify(res)) } });
jsbridge.sysshare({ title: "发现一个好东西", content: { //可选,一张或多张图片 images: [ "http://i.yimenyun.net/sys/1.jpg", "http://i.yimenyun.net/sys/2.jpg", "http://i.yimenyun.net/sys/3.jpg" ] } }, function(succ, res) { if (!succ) { alert(json.stringify(res)) } });
弹出分享菜单,用默认值分享
jsbridge.share();
弹出分享菜单,用指定的标题分享,其他用默认值
jsbridge.share({ title: "这是自定义分享标题(未指定则为网页标题)" }, function(succ) { alert(succ ? "分享成功" : "分享失败"); });
指定了 to 参数,不会弹出分享菜单,直接呼出对应的app完成分享
jsbridge.share({ //0 微信朋友圈 //1 微信好友 //2 qq好友 //3 qq空间 to : 0, title : "可以指定标题", link : "https://m.baidu.com", imgurl: "http://i.yimenyun.net/sys/logo.png", desc : "摘要:内事问百度,外事找谷歌,你懂的。" });
当点击原生标题栏上或功能面板上的分享按钮时调用,跟微信公众号内的分享接口用法相同。
参数为 json 数据类型
onmenusharetimeline 当分享到微信朋友圈时
onmenusharefriend 当分享到微信好友时
onmenushareqq 当分享到qq好友时
onmenushareqzone 当分享到qq空间时
jsbridge.onmenusharetimeline({ title : "自定义的标题", link : "https://www.yimenapp.com/doc/", imgurl: "http://i.yimenyun.net/sys/logo.png", desc : "自定义的摘要内容", success: function() { alert("分享成功"); }, cancel: function() { alert("取消了分享或分享失败"); } }); alert("已设置,请点击分享到朋友圈试试。");
当点击原生标题栏上或功能面板上的分享按钮时调用,注意参数为 function 函数。
参数为 function 函数
onmenusharetimeline 当分享到微信朋友圈时
onmenusharefriend 当分享到微信好友时
onmenushareqq 当分享到qq好友时
onmenushareqzone 当分享到qq空间时
jsbridge.onmenusharetimeline(function(){ //这是点击分享到朋友圈时需要执行的函数 //可以做分享网页、图片、文字、多图等任何事情 alert("你点击了分享到微信朋友圈按钮"); }); alert("已设置,请点击分享到朋友圈试试。");
分享纯文字到微信好友或微信朋友圈
结果回调 callback: function(succ) { }
jsbridge.sharetext({ //to: 0 微信朋友圈, 1 微信好友 text: "纯文字分享...文本内容" }, function(succ) { alert(succ ? "分享成功" : "分享失败"); });
分享纯图片,不支持qq空间
结果回调请参考sharetext
jsbridge.shareimage({ //0 微信朋友圈 //1 微信好友 //2 qq好友 //to : 0, imgurl: "http://i.yimenyun.net/sys/1.jpg" });
分享音乐(音频),不支持qq空间
结果回调请参考sharetext
jsbridge.sharemusic({ //0 微信朋友圈 //1 微信好友 //2 qq好友 //to : 0, title: "音乐分享标题", desc : "可以写一点描述", //图片链接 imgurl: "https://i.yimenyun.net/sys/logo.png", //点击跳转的链接 targeturl: "https://m.baidu.com/", //音乐链接 musicurl: "https://i.yimenyun.net/sys/music.mp3", //封面 songalbumurl: "https://i.yimenyun.net/sys/1.jpg", //歌词 songlyric : "hello lyric" });
分享视频(仅支持微信)
结果回调请参考sharetext
jsbridge.sharevideo({ //0 微信朋友圈 //1 微信好友 //to : 0, title: "视频分享标题", desc : "可以写一点描述", //图片链接 imgurl: "http://i.yimenyun.net/sys/logo.png", //视频链接 videourl: "http://flv3.people.com.cn/dev1/mvideo/vodfiles/2017/08/08/992bfdfef09d80e809cede9c9dd04916_c.mp4" });
jsbridge.sharewxminiprogram({ //微信小程序 原始id username: "gh_fa2c1baa7833", //小程序页面路径 path : "", //标题 title : "分享的标题", //描述文字 description: "描述文字", //是否使用带 shareticket 的分享 withshareticket: false, //类型,0正式版,1测试版,2体验版 programtype: 0, //封面缩略图,需以 http 或 https 开头 thumbimage: "http://i.yimenyun.net/sys/4.jpg", //兼容低版本微信客户端的网页链接 webpageurl: "https://www.yimenapp.com/" });
一键分享多张图片到微信朋友圈、qq空间等
结果回调 callback: function(succ) { }
jsbridge.shareimages({ text : "这是一小段多图分享的说明文本\n https://m.baidu.com/", images: [ "http://i.yimenyun.net/sys/1.jpg", "http://i.yimenyun.net/sys/2.jpg", "http://i.yimenyun.net/sys/3.jpg", "http://i.yimenyun.net/sys/4.jpg", "http://i.yimenyun.net/sys/5.jpg", "http://i.yimenyun.net/sys/6.jpg", "http://i.yimenyun.net/sys/7.jpg", "http://i.yimenyun.net/sys/8.jpg", "http://i.yimenyun.net/sys/9.jpg" ]}, function(succ) { //仅苹果版支持回调分享结果 if (succ) { alert("发送成功"); } else { alert("失败或取消了"); } });
图片相关
多张组图浏览,支持横竖屏自适配、手势缩放、批量保存到相册、一键分享朋友圈;
可配置双击屏幕自动触发多图浏览,无需调用js接口。
jsbridge.showimages({ //屏幕方向 0自适应,1横屏,2竖屏 screenorientation: 0, //显示保存到相册按钮 save: true, //显示一键分享多图按钮 share: true, //多图分享摘要文字 share_text: "webapp快捷打包 多图分享摘要", //当前页显示第几张(从0开始,默认0) startindex: 2, //自动滚动播放延时毫秒数,0 则不自动滚动 autoscrollinterval: 5000, //图片组, text 是文字说明 items:[ { url :"http://i.yimenyun.net/sys/1.jpg", text:"美丽的大自然 01" }, { url :"http://i.yimenyun.net/sys/2.jpg", text:"美丽的大自然 02" }, { url :"http://i.yimenyun.net/sys/3.jpg" }, { url :"http://i.yimenyun.net/sys/4.jpg" }, { url :"http://i.yimenyun.net/sys/5.jpg" }, { url :"http://i.yimenyun.net/sys/6.jpg", text:"美丽的湖泊" }, { url :"http://i.yimenyun.net/sys/7.jpg" } ] });
图片链接:
//以 http:// 或 https:// 打头的图片链接 jsbridge.saveimagetoalbum("{{saveimagetoalbum1.url}}", function(succ) { alert(succ ? "保存成功" : "保存失败:下载失败或没有相册使用权限"); });
保存图片 base64 url 到相册。
//图片 base64 url jsbridge.saveimagetoalbum("data:image/png;base64,ivborw0kggoaaaansuheugaaaqaaaaeacamaaabrrfhuaaaabgdbtueaak/inwwk6qaaabl0rvh0u29mdhdhcmuaqwrvymugsw1hz2vszwfkexhjztwaaabxuexurf///xkw2/d4/dlr kxx8yjk7r c3scc3ehy 2q96gu96d2p4t6p4cpl9rte9eyw5inl7s j33nd61u25pbr702w5c6i31y35qby8nre65fr77xe9mtl9v4l57aaaaussurbvhja7jzreqmgeiyvt0fjpmak7d7/dw667sqo8swm r0/22eim8b8awkwbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0mplt5qg9/s9tdonm8/ueb6mxqzh vnnyqbzzzcwje4fx9nmvz7usmuwpg0lans 7d6ccdqgx 24/fj4mnpct/t9 ilbotcyl2flzr77/wjfhoasjhgaeyjnzo/tf4jr9/9lgyf11he3j9fps5zom7tvpnphlbcnkswiyzxnngxcuv53o3guec94kvg946dubkxhm/wk4d 2sdq1pjr9rvj7vrnyye5ztioq/rzhtrv5/aiu66y4r t/x0nmqkfu/ryn9lsvlu8/v//ahv3frefhutwmhor 83dk5/mtycdkcen77yw57qhi/icdr8fkefyvsvsdndtjxohd6i5/vxyrsv4uwfmrr0qfbb4q/i/ge2dc9blfxenlhiajd6l6x6e0dmu7/nutdixek9px323eqpxamru00y8ngpanzy1m/rvm9l/uza9xm31en50nojigmvqfz8mbqm ey2dxammggqdfpmo6lb15dgwtqccybf1yct3c2q2rr09giqbenccuyzrp/nmdu3cbajndfsxpgfie3dvbdwhlggsz bi2joh0gbogjfu na4xilrpghyqwfrqizhufbjsswd4vzjuxsb/ta5up7js0/m6ajuz5dr04kjpbahjqo eom7g vperdua/yussp2jqxx11/ybsnq/olk2k0ia9gmahuuptioa3qkejqb030jdpvygcviiqklvbsojuqfe2maljeylylstzxkzc9qfkvf94fzxppxnls50pqdd6wgupqeyu1kruth6xgcnsibylfartuz18o10 9 maaufiwetqakktld5sbr5hexgcznx0au8w5f6dqvbdfliwyonzeru7vd42prmyd04qvcr1fww5nlanwuoyynnbuq0/lcuvtjb8fixi2pvpkxclpt9ch4v/y3w7px01gwcitbm2vjzjuymavdjgpls3lav /p/pbhtvpot7xugpdmuhnhy33j8frfo/pfjnzgqnkx7 /tpz6n0xxrya5xgtakmgb ee1efo7d/qdf/yqvvlnkgxls5xm0ehemqj43fkd3p y9jwcahmqrdwy5lmrcbbmp3fm wuvzfjsb2hxvfq4m0/zcjsjucury5/rcoq31u8yuf4ueqay5tedvwczkmbrpyv4r4nhathepxc3dleplnzvpldxlkljgiaeu6im1jvyu4lkhcnpfdsf5ullfibyg7vh/rl79boxtx h8zekhawjk0up7aeec9d zmna5nll hgmceheryz6z/y xquzoqf50iljjdsf6m9n zhlqbyflxicbsoztkz3j/w3i4ybnyfpkblsm5/vnd d9ldo8if21kmqjdl6oerv6gett7ozruzduu/y05fdozvr1k/jorqmzav wl1eh8h5fdj8pjxyccxzacivjxhnl/qtk8qvy18d5eqjk/0jow/xj4zplre4ty lvtlz60/a0vbd tbfbi70o5tov7lsnmnqam3g8civkxnml/lhyeq/6g5jdg7nffcngo evm/jbek3xmotyf/lurv55gzdohtufwtv8boetwackn2/qzixy61qm53swaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibl/bvgapbljax1p/ajaaaaaelftksuqmcc", function(succ) { alert(succ ? "保存成功" : "保存失败:转码失败或没有相册使用权限"); });
保存图片 base64 内容到相册。
//图片 base64 内容 jsbridge.saveimagetoalbum("ivborw0kggoaaaansuheugaaaqaaaaeacamaaabrrfhuaaaabgdbtueaak/inwwk6qaaabl0rvh0u29mdhdhcmuaqwrvymugsw1hz2vszwfkexhjztwaaabxuexurf///9gebv3w7/ju0pcqoeuogtorfnosffri3 zxyt9hm dyy99inpxgwpo4sofvq ypg l/ct06je6ckerju jwrnw5jorkvpgroumac 6dkvo5sfbhwrbslveaaaussurbvhja7jzreqmgeiyvt0fjpmak7d7/dw667sqo8swm r0/22eim8b8awkwbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0mplt5pg9/s9tdonm8/ueb6mxqzr vnnyqbzzyiwje4fx9nmvz7usmuepq0lans 7d6cadqgx 24/fj4mnpct/t9 ilbotcyl2flzr77/4jehoasjrgaeyjnbo/tf4jr9/9lgyf11he3j9fps5zom7tvpnphlbcnkseiyzxpngxcuv53o3gyec94kvg946dubkxhm/wk4d 2sdg1pjr9rvj7vpnyye5rtooq/xzhtrv5/biq66y4q t/x0nmqkfu/ryn9luvlu8/v//ahv3lrefhutwmhor 83dk5/mtycdkcen77yw57qhi/icdr8fkefyvsvsdndtjxohd6i5/vxirsv4uwfmrrwqfbb4q/a/he2dc9blfxenlhiajd6l6x6e0dmu6/nutdixek9hx323eqphamru00y8nghanzy1m/rvm9l/uza9xm31en50nojigmvqfz8mbqm ey2dxammggqdlpmo6lb15diwtqcdybf1yct3c2q2rr09oiqbenccuyzrp/nmdu3cbajndfsxpgfie3dvbdwhlggsz bi2dol0gbogjfu na4xilrpghyqwfrqizhufbjcswd4vzjuxsb/ta5up7js0/m6ajuzzdr04kjpbahjqo eom7g vperdua/yusup2jqxx11/ybsnq/olk2k0ia9gmahuuptioa3qkejqb030jdpvyicviiqkfvbsonuqfe2maljeylylstzxkzc9qfkvf94ezxppxnls51pqdd6wgupqeyu1kruth6xgcnsibylfartuz18g11 9 maaufiwetqakktld5sbr5hexgcznx0au8w5f6dqvbdfliwyonzeru7vd42prmyd04qvcr1fww5nlanwuoyynnbuq0/lcuvtjb8fixi2pvpkxclpt9ch4v/y3w7px01gwcitbm2vjzjuymavdjgpls3lav /p/pbhtvpot7xugpdmuhnly33j8frfo/pfjnzgqnkx7 /tpz6n0xxrya5xgtakmgb ee1efo7d/sdf/yqvvlnkgwrs5xm0ehemqj43fkd3p y9jwcahmqrdwy5lmrcbfmp3fm wuvzfjsb2hxvfq4m0/zcjsjucury5/rcoq31u8yuf4ueqay5tedvwczmmbbpyv4r4nhathepxc3dlellnzvpldxjkljgiaeu6im1jvyu4lkhcnpfdsf5ullfibyg7vh/rl79boxtx h8aekhawjk0up7aeec9d zmni5mll hgmceheryz6z/y xquzoqf50iljjdsf6m9n zhlqbyflxicbsoztkz3j/w3i4ybnyfpkblsm5/vnd d9ldo8if20kmqjdl6oerv6gett7ozruzduu/y05fdozvr1k/jorqmzav wl1eh8h5fdj8pjxycc5zacivjxhtl/qtk8qvy18d5eqjk/wjow/xj4zplre4ty lvtlz60/a0vbd tbfbi70o5tov7lunmnqam3g8cifkxnml/lhyeq/6g5jdg7nffcngo evm/jbek3xmotyf/lurv56gzdohtufwtv8boetwackm2/qzixy61qm53swaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibl/bvgahytjawap/udaaaaaelftksuqmcc", function(succ) { alert(succ ? "保存成功" : "保存失败:转码失败或没有相册使用权限"); });
批量保存图片到相册。
//图片链接或base64图片数组 jsbridge.saveimagestoalbum([ "http://i.yimenyun.net/sys/1.jpg", "http://i.yimenyun.net/sys/2.jpg", "http://i.yimenyun.net/sys/3.jpg", "http://i.yimenyun.net/sys/4.jpg", "http://i.yimenyun.net/sys/5.jpg" ], function(succ) { if (succ) { jsbridge.toast("已保存"); } else { alert("保存失败:下载失败或没有相册使用权限"); } });
保存 web 截屏图片到相册(仅截取 web 浏览窗口)。
jsbridge.savescreenshottoalbum(function(succ) { alert(succ ? "保存成功" : "保存失败:没有相册使用权限"); });
//链接请以 http:// 或 https:// 开头 jsbridge.savevideotoalbum("http://cdn.myapp.ltd/sys/sunflower.mp4", function(succ) { alert(succ ? "保存成功" : "下载失败或没有相册使用权限"); });
扫一扫
缓存/cookie
获取缓存大小
jsbridge.cachesize(function(size) { var txt = size "字节\n"; txt = (size / 1024 / 1024.0).tofixed(2) "mb"; alert(txt); });
清除缓存
jsbridge.clearcache(function() { alert("缓存已清除"); });
清除 cookie
jsbridge.clearcookie(); alert("cookie 已清除");
前进/后退
检查是否可以执行 history.forward()
jsbridge.cangoforward(function(can){ alert(can); });
检查是否可以执行 history.back()
jsbridge.cangoback(function(can){ alert(can); });
一键返回九游会j9备用网址首页,无论当前处于多少层级的子页面。
// 参数 true: 同时跳转到九游会j9备用网址首页链接, false: 不跳转链接 jsbridge.backtohome(true);
消息推送/通知
腾讯
百度开放平台
高德地图
app 信息
jsbridge.appsettings();
jsbridge.appdownloads();
获取app安装id,升级安装不会变,卸载app重新安装会改变。
jsbridge.appinfo(function(info){ //返回json类型 /** { appid :123, //打包平台 app id appver :101, //版本号 appvername :1.0.0, //版本名 appname :"app名称", url :"http://...打包网址", packagename :"com.xxx.yyy", //包名 platformver :26, //平台版本号 devicename :"设备名称", resolution :"1080x1920", //屏幕分辨率 deviceid :"不推荐,请使用 getimei/getoaid 接口", installid :"安装id,卸载app重装会变", certmd5 :"应用md5签名,仅安卓端", certsha1 :"应用sha1签名,仅安卓端" } **/ alert(json.stringify(info)); });
• 进入系统设置项目,设置服务状态;
• 部分开关功能可以先调用 getsettingstate 接口检查设置项的开关状态;
• 选择一项运行测试:
/**
整形参数
0 系统设置(默认)
1 定位
2 wifi无线网络
3 蓝牙
4 显示
5 声音/震动
6 通知
7 语言
**/
jsbridge.opensetting(0);
• 选择一项运行测试:
/**
整形参数
1 定位 - 是否启用gps定位
2 定位 - 是否启用网络定位
3 蓝牙服务
6 通知
**/
jsbridge.getsettingstate(1, function(on) {
alert(on ? "已开启" : "已关闭");
});
/**
回调参数 on, 布尔类型,指示开关状态
true : 已开启
false: 已关闭
**/
• 获取移动设备识别码 imei/meid,需要 read_phone_state 隐私权限;
• 多个 imei/meid 用逗号(,)分隔,拨号输入 *#06# 可查看;
• android 10 不能获取 imei,此接口返回 android id;
• 仅支持安卓,苹果版推荐使用 getidfa。
jsbridge.getimei(function(imei){ if (imei) { alert(imei); } else { alert("获取失败或没有权限"); } });
• 详情请参考 官方说明;
• 除了各厂家较老的安卓系统基本都支持,可配合 getimei 使用;
• 仅支持安卓,苹果版推荐使用 getidfa。
jsbridge.getoaid(function(oaid){ if (oaid) { alert(oaid); } else { alert("获取失败或此设备不支持"); } });
• 获取广告标识符 idfa;
• 设置 - 隐私 - 跟踪,设置跟踪开关;
• 仅支持苹果,安卓版推荐使用 getimei / getoaid;
jsbridge.getidfa(function(idfa){ if (idfa) { alert(idfa); } else { alert("没有权限或已限制跟踪"); } });
• 由于隐私限制,此设备id已不可靠。
• 安卓推荐使用 getimei getoaid
• 苹果推荐使用 getidfa
jsbridge.getdeviceid(function(id){ alert(id); });
获取app安装id,升级安装不会变,卸载app重新安装会改变。
jsbridge.getinstallid(function(id){ alert(id); });
用户按主屏home键,有电话拨入等, app被推到后台时触发。
jsbridge.onappenterbackground(function(){ console.log("enter background"); }); alert("已设置,请按主屏home键再打开app。");
当app被激活,回到前台时触发。
jsbridge.onappenterforeground(function(){ alert("enter foreground~~") }); alert("已设置,请按主屏home键切换app。");
获取设备配置的摄像头数量和类型
jsbridge.checkcamera(function (result) { alert(json.stringify(result)); }); /* result 返回参数: { count: //摄像头数量,int 类型 front: //是否有前置摄像头,bool 类型 back : //是否有后置摄像头,bool 类型 } */
//请求 相机、写相册 权限 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 的系统设置界面。 */
//请求定位权限 jsbridge.requestpermissions([ "location" ], function(result) { if (result.granted) { alert("已授权"); } else { alert("未授权,不再询问: " result.neveraskagain); } });
阿里百川
新浪微博
蓝牙(ble)
传感器
ios内购(in-app purchase)
多屏异显
音视频
网络
融云 - im即时通讯与音视频通信
今日头条/巨量引擎/字节跳动
海外
移动应用统计
无需代码集成,申请接入 https://mtj.baidu.com/
无需代码集成,申请接入 https://mta.qq.com/mta/ctr_index/census
其他第三方sdk
打印/扫描/智能终端
其他
jsbridge.toast('hello, app.');
jsbridge.vibrate();
jsbridge.showsplash();
jsbridge.home();
//退出,不结束app进程 jsbridge.exit();
//布尔参数,退出app后是否需要结束进程,默认 false jsbridge.exit(true);
//重启应用 //仅支持 android 10 以下系统 //android 10 及以上相当于 jsbridge.exit(true); 需要手工启动应用 jsbridge.restart();
发起网络访问请求,原生网络请求,性能高,也不会有 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("网络访问请求失败"); } });