跳到主要内容

文档 reload 后事件监听及 SDK 配置失效

问题描述

文档在某些场景下会重新加载(reload),reload 后以下内容会失效:

  • 通过 Application.addListener 注册的事件监听
  • 通过 SDK 设置的各类配置(如工具栏配置、权限配置等)

这是因为事件监听和 SDK 配置信息在文档侧也存储了一份,文档重新加载后文档侧的数据会丢失,需要重新设置。

解决方案

使用 ZOfficeSDK.addListener 监听 IDocs.Event.FileOpen 事件。该事件在每次文档打开(包括 reload 后重新打开)时都会触发,且不受文档 reload 影响

IDocs.Event.FileOpen 回调中重新注册事件监听和 SDK 配置,即可确保 reload 后一切恢复正常。

关于 IDocs.Event.FileOpen 事件的详细说明,参见【监听事件 - IDocs.Event.FileOpen

var app;
ZOfficeSDK.addListener('.my-doc-editor', IDocs.Event.FileOpen, async (isReady) => {
if (!isReady) {
console.log('文档打开失败');
return;
}
console.log('文档打开成功');
app = await ZOfficeSDK.connect('.my-doc-editor');
await app.ready();

// 重新注册事件监听
app.addListener(IDocs.Event.FileStatus, (data) => {
console.log('FileStatus: ', data);
});

// 重新设置 SDK 配置(示例:设置 UI 状态)
await app.setUIState({ cursorContext: { focus: false, scroll: true } });
});

ZOfficeSDK.mount('https://example.com/docs/app/.../edit/content?token=xxx', '.my-doc-editor', true);

提示: 所有需要在文档生命周期内持续生效的事件监听和 SDK 配置,都建议放在 IDocs.Event.FileOpen 回调中进行设置。