Page轻应用开发文档-微博客户端JSAPI

跳转到: 导航, 搜索

目录

使用条件

微博 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) {
	// 客户端没有获取到结果
}
文档更新时间: 2014-05-20