Page轻应用开发文档-微博客户端JSAPI
(以“=使用条件= 微博 Android 与 iPhone 官方客户端 4.3.0 以上版本的内置浏览器。 =初始化事件= 网页加载完成时,会向 `document` 发...”为内容创建页面) |
|||
第19行: | 第19行: | ||
有时网页加载速度较慢,可能在 `DOMContentLoaded` 之后很久 bridge 才会注入。如果对速度要求很高,可以在 `DOMContentLoaded` 时主动告诉 native 来注入 bridge,具体方式如下: | 有时网页加载速度较慢,可能在 `DOMContentLoaded` 之后很久 bridge 才会注入。如果对速度要求很高,可以在 `DOMContentLoaded` 时主动告诉 native 来注入 bridge,具体方式如下: | ||
− | * 等待 `DOMContentLoaded` 事件(`$(document).ready()`) | + | * • 等待 `DOMContentLoaded` 事件(`$(document).ready()`) |
− | * 生成与 native 通信的 `iframe` 标签。 | + | * • 生成与 native 通信的 `iframe` 标签。 |
− | * 注意将 `iframe` 的 `id` 设为 `__WeiboJSInvokeIframe` 可以避免 bridge 注入时重复生成。 | + | * • 注意将 `iframe` 的 `id` 设为 `__WeiboJSInvokeIframe` 可以避免 bridge 注入时重复生成。 |
− | * 将 `iframe` 的 `src` 设为 `sinaweibo://bridge_initialize` | + | * • 将 `iframe` 的 `src` 设为 `sinaweibo://bridge_initialize` |
− | * 等待 `WeiboJSBridgeReady` 事件 | + | * • 等待 `WeiboJSBridgeReady` 事件 |
+ | |||
<pre> | <pre> | ||
第76行: | 第77行: | ||
alert('定位结束!'); | alert('定位结束!'); | ||
}, | }, | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}); | }); | ||
</pre> | </pre> | ||
第99行: | 第88行: | ||
- `url`: 当前选中的图片src; | - `url`: 当前选中的图片src; | ||
- `urls`: 当前页面中的所有图片src,用于支持横滑查看 | - `urls`: 当前页面中的所有图片src,用于支持横滑查看 | ||
+ | |||
- 返回值:无 | - 返回值:无 | ||
+ | |||
- 错误码: | - 错误码: | ||
- `MISSING_PARAMS`: `url` 与 `urls` 至少需要传递一个 | - `MISSING_PARAMS`: `url` 与 `urls` 至少需要传递一个 | ||
第107行: | 第98行: | ||
- 参数列表:无 | - 参数列表:无 | ||
+ | |||
- 返回值:`{"network_type": "wwan"}`,`wwan` 代表 2G 或 3G, `wifi` 代表 WIFI, `fail` 代表无网络 | - 返回值:`{"network_type": "wwan"}`,`wwan` 代表 2G 或 3G, `wifi` 代表 WIFI, `fail` 代表无网络 | ||
第113行: | 第105行: | ||
- 参数列表:无 | - 参数列表:无 | ||
+ | |||
- 返回值:`{"result": "http://weibo.com"}` | - 返回值:`{"result": "http://weibo.com"}` | ||
+ | |||
- 错误码: | - 错误码: | ||
- `USER_CANCELLED`: 用户取消了扫描 | - `USER_CANCELLED`: 用户取消了扫描 | ||
第123行: | 第117行: | ||
- 参数列表: | - 参数列表: | ||
- `source`: `camera` 为拍照,其他为从相册选择 | - `source`: `camera` 为拍照,其他为从相册选择 | ||
+ | |||
- 返回值:`{"base64": "9sa1..."}` | - 返回值:`{"base64": "9sa1..."}` | ||
+ | |||
- 错误码: | - 错误码: | ||
- `USER_CANCELLED`: 用户取消了选图 | - `USER_CANCELLED`: 用户取消了选图 | ||
第132行: | 第128行: | ||
- 参数列表:无 | - 参数列表:无 | ||
+ | |||
- 返回值:`{"lat": 100, "long": 100}` | - 返回值:`{"lat": 100, "long": 100}` | ||
+ | |||
- 错误码: | - 错误码: | ||
- `SERVICE_FORBIDDEN`: 定位服务不可用 | - `SERVICE_FORBIDDEN`: 定位服务不可用 | ||
第142行: | 第140行: | ||
- 使用条件: | - 使用条件: | ||
- 仅 weibo.com、weibo.cn 及其子域名可以调用 | - 仅 weibo.com、weibo.cn 及其子域名可以调用 | ||
+ | |||
- 参数列表: | - 参数列表: | ||
- `cid`: 内容的id,必需 | - `cid`: 内容的id,必需 | ||
+ | |||
- 返回值:`{"result": "{'key': 'value'}"}`,result为内容预加载接口返回值 | - 返回值:`{"result": "{'key': 'value'}"}`,result为内容预加载接口返回值 | ||
+ | |||
- 错误码: | - 错误码: | ||
- `MISSING_PARAMS`: 未传递 `cid` 参数 | - `MISSING_PARAMS`: 未传递 `cid` 参数 | ||
第156行: | 第157行: | ||
- 使用条件: | - 使用条件: | ||
- 仅 weibo.com、weibo.cn 及其子域名可以调用 | - 仅 weibo.com、weibo.cn 及其子域名可以调用 | ||
+ | |||
- 参数列表: | - 参数列表: | ||
- `cid`: 内容的id,必需 | - `cid`: 内容的id,必需 | ||
+ | |||
- 返回值:无 | - 返回值:无 | ||
+ | |||
- 错误码: | - 错误码: | ||
- `MISSING_PARAMS`: 未传递 `cid` 参数 | - `MISSING_PARAMS`: 未传递 `cid` 参数 | ||
第169行: | 第173行: | ||
- 参数列表: | - 参数列表: | ||
- `title`: 新标题,必需 | - `title`: 新标题,必需 | ||
+ | |||
- 返回值:无 | - 返回值:无 | ||
+ | |||
- 备注:通过此方法设置的标题优先级最高 | - 备注:通过此方法设置的标题优先级最高 | ||
+ | |||
- 错误码: | - 错误码: | ||
- `MISSING_PARAMS`: 未传递 `title` 参数 | - `MISSING_PARAMS`: 未传递 `title` 参数 | ||
+ | |||
+ | |||
+ | =响应 Event= | ||
+ | |||
+ | 有时 native 会给网页发送一些通知,网页可以选择性接收。 | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | WeiboJSBridge.on('networkTypeChanged', function(params){ | ||
+ | document.write('网络状态已变为:' + params.network_type); | ||
+ | }); | ||
+ | </pre> | ||
2014年5月20日 (二) 09:21的最后版本
目录 |
使用条件
微博 Android 与 iPhone 官方客户端 4.3.0 以上版本的内置浏览器。
初始化事件
网页加载完成时,会向 `document` 发送 `WeiboJSBridgeReady` 消息,网页需要监听此消息,收到后再访问 JSBridge。
document.addEventListener('WeiboJSBridgeReady', function () { // do something. });
主动触发初始化
有时网页加载速度较慢,可能在 `DOMContentLoaded` 之后很久 bridge 才会注入。如果对速度要求很高,可以在 `DOMContentLoaded` 时主动告诉 native 来注入 bridge,具体方式如下:
- • 等待 `DOMContentLoaded` 事件(`$(document).ready()`)
- • 生成与 native 通信的 `iframe` 标签。
- • 注意将 `iframe` 的 `id` 设为 `__WeiboJSInvokeIframe` 可以避免 bridge 注入时重复生成。
- • 将 `iframe` 的 `src` 设为 `sinaweibo://bridge_initialize`
- • 等待 `WeiboJSBridgeReady` 事件
document.addEventListener("DOMContentLoaded", function(event) { if (typeof window.WeiboJSBridge === 'undefined') { var invokeIframe = document.createElement('iframe'); invokeIframe.id = '__WeiboJSInvokeIframe'; invokeIframe.style.display = 'none'; document.documentElement.appendChild(invokeIframe); invokeIframe.src = 'sinaweibo://bridge_initialize'; } });
调用Bridge的Action
通过 `window.WeiboJSBridge` 的 `invoke` 方法来调用 bridge 的 action。
例如:
WeiboJSBridge.invoke("getNetworkType", {"param" : "value"}, function (params, success, code) { if (success) { document.write('网络状态是' + params.network_type); } else { if (code == WeiboJSBridge.STATUS_CODE.NO_RESULT) { // do something. } } });
第一个参数为要调用的 action,第二个为 参数列表,第三个为回调函数。
或者可以为成功失败提供不同的回调方法,如:
WeiboJSBridge.invoke('getLocation', {}, { success: function(params) { resultDiv.innerHTML = params.lat + ', ' + params.long; }, fail: function(params, code) { var reason; if (code == WeiboJSBridge.STATUS_CODE.SERVICE_FORBIDDEN) { reason = '定位服务未启用'; } resultDiv.innerHTML = '定位失败, ' + reason; }, final: function(params) { alert('定位结束!'); }, });
Action 列表
openImage 查看大图
- 参数列表:
- `url`: 当前选中的图片src; - `urls`: 当前页面中的所有图片src,用于支持横滑查看
- 返回值:无
- 错误码:
- `MISSING_PARAMS`: `url` 与 `urls` 至少需要传递一个
getNetworkType 获取网络状态
- 参数列表:无
- 返回值:`{"network_type": "wwan"}`,`wwan` 代表 2G 或 3G, `wifi` 代表 WIFI, `fail` 代表无网络
scanQRCode 扫描二维码
- 参数列表:无
- 返回值:`{"result": "http://weibo.com"}`
- 错误码:
- `USER_CANCELLED`: 用户取消了扫描 - `SERVICE_FORBIDDEN`: 设备没有摄像头或用户不允许使用摄像头
pickImage 获取照片
- 参数列表:
- `source`: `camera` 为拍照,其他为从相册选择
- 返回值:`{"base64": "9sa1..."}`
- 错误码:
- `USER_CANCELLED`: 用户取消了选图 - `SERVICE_FORBIDDEN`: 设备没有摄像头或用户不允许选图
getLocation 定位
- 参数列表:无
- 返回值:`{"lat": 100, "long": 100}`
- 错误码:
- `SERVICE_FORBIDDEN`: 定位服务不可用 - `NO_RESULT`: 获取位置失败
queryPreloadCache 获取预加载内容
- 使用条件:
- 仅 weibo.com、weibo.cn 及其子域名可以调用
- 参数列表:
- `cid`: 内容的id,必需
- 返回值:`{"result": "{'key': 'value'}"}`,result为内容预加载接口返回值
- 错误码:
- `MISSING_PARAMS`: 未传递 `cid` 参数 - `NO_RESULT`: 指定缓存不存在 - `INTERNAL_ERROR`: 缓存读取失败 - `ILLEGAL_ACCESS`: 调用域名无权限访问
deletePreloadCache 删除预加载缓存
- 使用条件:
- 仅 weibo.com、weibo.cn 及其子域名可以调用
- 参数列表:
- `cid`: 内容的id,必需
- 返回值:无
- 错误码:
- `MISSING_PARAMS`: 未传递 `cid` 参数 - `INTERNAL_ERROR`: 文件删除失败(不包括缓存不存在) - `ILLEGAL_ACCESS`: 调用域名无权限访问
setBrowserTitle 设置顶导标题
- 参数列表:
- `title`: 新标题,必需
- 返回值:无
- 备注:通过此方法设置的标题优先级最高
- 错误码:
- `MISSING_PARAMS`: 未传递 `title` 参数
响应 Event
有时 native 会给网页发送一些通知,网页可以选择性接收。
WeiboJSBridge.on('networkTypeChanged', function(params){ document.write('网络状态已变为:' + params.network_type); });
Event 列表
networkTypeChanged 网络状态改变
- 使用条件:
- 目前仅iPhone支持
- 参数列表:
- `network_type`: 改变后的状态,`wwan` 或 `wifi` 或 `fail`
Status Code 列表
状态码会在 action 的回调中提供
OK: 操作成功 MISSING_PARAMS: 缺少必须的参数 ILLEGAL_ACCESS: 非法调用 INTERNAL_ERROR: 客户端内部处理错误 ACTION_NOT_FOUND: 客户端未实现此 action NO_RESULT: 客户端没有获取到结果 USER_CANCELLED: 用户取消了操作 SERVICE_FORBIDDEN: 相关服务未启用或被禁止 (如定位服务,相册权限)
网页通过比对回调的code值和以上值进行处理
if (code == WeiboJSBridge.STATUS_CODE.NO_RESULT) { // 客户端没有获取到结果 }