H5 文件是指由开发者制作的用于多端共享的 HTML5 页面,是 ZegoDocsView SDK 支持的一种新的文件类型。开发者可以在 H5 文件中添加类似于动态 PPT 中的翻页、跳步、动画触发器、音视频等功能。
本文将通过 H5 文件的制作和使用两个部分来介绍:
ZEGO 提供了制作完成的 H5 文件供开发者参考,包含集成 ZEGO 桥接层以及接口使用方法,详情请参考 H5 文件示例源码。
在 ZegoDocsView SDK 中使用 H5 文件的完整示例源码请参考 示例源码。
本时序图描述了开发者制作 H5 文件时,H5 文件通过 ZEGO 桥接层和 ZegoDocsView SDK 的交互流程。
H5 文件的制作,即如何集成并与 ZEGO 桥接层交互,分为以下 5 个步骤,开发者请确保遵循以下步骤。
在 H5 文件中引入 ZEGO 桥接层。开发者需要保证在使用桥接层方法时该 H5 资源已加载完成。
桥接层文件地址如下:
https://storage.zego.im/ppt2h5/ZEGOBridge.js
引入代码示例:
<script src="https://storage.zego.im/ppt2h5/ZEGOBridge.js"></script>
调用 getInstance
注册相关回调并获取桥接层的唯一实例。
为达到多端互通的效果,H5 文件中需要执行的所有业务操作都必须先调用桥接层接口,然后在对应回调中执行。
// 获取唯一实例
const bridge = ZEGOBridge.getInstance({
// 注册翻页、跳步回调
onPageChange: function (params) {
// 需要在此回调函数中返回一个 Promise 对象,用于通知桥接层当前翻页、跳步任务已执行完成
return new Promise(resolve => {
// 执行具体的翻页、跳步逻辑
// 具体业务逻辑
resolve();
});
},
// 注册操作记录回调
onRecordChange: function (params)
{
// 需要在此回调函数中返回一个 Promise 对象,用于通知桥接层当前操作任务已执行完成
return new Promise(resolve => {
// recordList 表示当前操作记录列表
// oldRecordList 上一次的操作记录列表
// recordType 产生当前操作记录列表的操作类型,可根据此类型实现具体的业务
const { recordList, oldRecordList, recordType } = params;
// 根据 recordType、recordList、oldRecordList 来执行具体业务逻辑
resolve();
});
},
// 注册错误回调,可选
onError: function (params) {
// 具体业务逻辑
}
});
调用 getReady
,通知桥接层页面准备就绪,并传入初始页数、步数、总页数、当前页总步数等信息。
// 传入初始页数、步数、总页数、所有页对应总步数
bridge.getReady({
page: 1, // 初始页数为 1
step: 1, // 当前页初始步数为 1
pageCount: 3, // 总页数为 3
maxSteps: [ 5, 3, 1 ] // 总共有 3 页,每页总步数分别为5、3、1
})
调用 requestChangePage
通知桥接层当前需要翻页、跳步。
// 请求跳转到第 3 页、第 1 步
bridge.requestChangePage(3, 1);
调用其他相关接口通知桥接层当前需要执行其它操作。
// 此时追加一条当前页内容为 id 的记录
bridge.pushRecord({ id: 'ZEGO' })
// 移除最近一次操作记录
bridge.popRecord()
// 清空当前页操作记录
bridge.clearRecordStack()
// 使用内容为 name 的记录替换当前页所有操作记录
bridge.replaceRecordStack({ name: 'ZEGO' })
H5 文件制作成功后,想要实现多端互通,请按照如下步骤:
H5 文件制作及使用规范请参考 H5 文件规范。
// 步数、页数变更回调参数
interface OnPageChangeParams {
page: number; // 当前页数,从 1 开始
step: number; // 当前步数,从 1 开始
oldPage: number; // 原页数,从 1 开始
oldStep: number; // 原步数,从 1 开始
taskID: string; // 任务ID
}
// 操作记录类型
enum RecordType {
Push = 1, // 追加,对应于 pushRecord 接口
Pop, // 移除最新一个,对应于 popRecord 接口
Replace, // 全量替换,对应于 replaceRecordStack 接口
Clear, // 清空,对应于 clearRecordStack 接口
Stop = 100, // 停止音视频的场景
LateJoinRoom = 101, // 后进房场景
Back = 102 // 操作失败回退场景
}
// 操作记录列表变更回调参数
interface OnRecordChangeParams {
recordList?: any[]; // 当前操作列表,recordType = 100 时不存在
oldRecordList?: any[]; // 原操作列表,recordType = 100 时不存在
taskID: string; // 任务ID
recordType: RecordType; // 操作记录类型
push: boolean; // 当前操作是否是远端推送
}
// 失败回调参数
interface OnErrorParams {
code: number; // 错误码
msg: string; // 错误描述
data?: any; // 业务参数
error?: Error; // 错误堆栈
}
// 步数、页数变更回调
type pageChangeCallback = (params: OnPageChangeParams) => Promise<any>;
// 操作记录变更回调
type recordChangeCallback = (params: OnRecordChangeParams) => Promise<any>;
// 错误回调
type errorCallback = (params: OnErrorParams) => void;
// 获取实例需要传入的参数
interface BridgeOptions {
onPageChange: pageChangeCallback; // 页数、步数变更回调
onRecordChange: recordChangeCallback; // 记录变更回调
onError?: errorCallback; // 错误回调,可选
}
// 获取 ZEGOBridge 单例
static getInstance(options: BridgeOptions): Bridge;
// 页面初始数据
interface InitData {
page: number; // 文件初始所在页数,从 1 开始
step: number; // 文件初始当前页所在步数,从 1 开始
pageCount: number; // 文件总页数
maxSteps: number[]; // 文件所有页对应总步数
}
/**
* 通知桥接层页面准备就绪
*
* 调用时机:引入脚本成功,页面准备就绪,可以进行多端同步的时候
*
* note:一般情况下可在 页面 load 的事件回调中调用
*
* @param data 页面初始数据
*/
getReady(data: InitData): void
/**
* 发送翻页、跳步请求
*
* 调用时机:页面准备就绪,getReady 调用完成后,需要翻页、跳步的时候
*
* note:这里只是发送翻页、跳步请求,并不代表请求成功,具体操作请在 onPageChange 回调中执行
*
* @param page 目标页数
*
* @param step 目标步数,选填,不填默认为 1,表示跳转到当前页第一步
*
* @return 请求任务ID,唯一标识
*/
requestChangePage(page: number, step?: number): string
ZEGOBridge 提供了 4 个接口来组合页面的操作,所有接口都用来更新当前页的操作记录列表 recordList,H5 文件需要保证组合调用后 recordList 不能超过 ZEGO 桥接层的最大长度限制,超过限制,桥接层会在 onError 回调中抛出,当前的一次操作请求会无效。
最大长度计算规则:recordList 转换为 base64 后的字节数不能超过 948 字节。
/**
* 追加一条操作记录
*
* 调用时机:页面准备就绪,getReady 调用完成后,需要追加操作的时候
*
* note:这里只是发送请求,并不代表请求成功,具体操作请在 onRecordChange 回调中执行
*
* note:如果开发者需要关注操作历史记录,请使用该方法
*
* @param record 操作记录
*
* @return 请求任务ID,唯一标识
*/
pushRecord(record: string | number | Array<any> | object | boolean | null): string
/**
* 移除最近一次操作记录
*
* 调用时机:页面准备就绪,getReady 调用完成后,需要移除最近一次操作记录的时候
*
* note:这里只是发送请求,并不代表请求成功,具体操作请在 onRecordChange 回调中执行
*
* @return 请求任务ID,唯一标识和最近一次操作记录
*/
popRecord(): { taskID: string; record: string | number | Array<any> | object | boolean | null }
/**
* 清空当前页操作记录
*
* 调用时机:页面准备就绪,getReady 调用完成后,需要清空当前页操作记录的时候
*
* note:这里只是发送请求,并不代表请求成功,具体操作请在 onRecordChange 回调中执行
*
* note:每当页数变更时,脚本内部已将操作记录清空,正常情况下开发者无需用到此方法
*
* @param record 操作记录
*
* @return 请求任务ID,唯一标识
*/
clearRecordStack(): string
/**
* 替换当前页操作记录
*
* 调用时机:页面准备就绪,getReady 调用完成后,需要替换当前页操作记录的时候
*
* note:这里只是发送请求,并不代表请求成功,具体操作请在 onRecordChange 回调中执行
*
* note:全量替换当前的操作记录列表,如果开发者不需要关注操作历史记录,请使该方法
*
* @param record 操作记录
*
* @return 请求任务ID,唯一标识
*/
replaceRecordStack(record: string | number | Array<any> | object | boolean | null): string
H5 桥接层错误码请参考 常见错误码。
联系我们
文档反馈