# 回调消息

# iframe-ready

时机iframe 完成加载时。

说明:需要在这个回调消息之后发送 init 接口消息初始化编辑器。

必须:是。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'iframe-ready') {
      iframeElement.contentWindow.postMessage(
        {
          action: 'init',
        },
        '*'
      )
    }
  },
  false
)

# refresh-token

时机:Token 过期时。

说明:需要获取最新的 Token,并通过发送接口消息 set-token 更新 Token。

必须:是。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'refresh-token') {
      // 获取最新的 token
      iframeElement.contentWindow.postMessage(
        {
          action: 'set-token',
          data: {
            token: '<LATEST TOKEN>',
          },
        },
        '*'
      )
    }
  },
  false
)

# collaboration-success

时机:协作链接建立成功时。

说明:可以处理页面 Loading 等事宜。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'collaboration-success') {
      console.log('当前文档id', event.data.data.fid)
    }
  },
  false
)

# sharedb-connection-error

时机:协作链接出错时。

说明:可以处理页面 Loading 等事宜。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'sharedb-connection-error') {
      console.log('当前文档id', event.data.data.fid)
    }
  },
  false
)

# submit-text-change-success

时机:用户修改提交成功时。

说明:可以更新外部列表、搜索索引等内容。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'submit-text-change-success') {
      console.log('当前文档id', event.data.data.fid)
    }
  },
  false
)

# text-change

时机:当前文档内容发生变更时。

说明:首次加载内容时也会触发。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'text-change') {
    }
  },
  false
)

# user-permission-change

时机:用户权限更新时。

说明:特指当前用户对当前文档的权限。如果变为无权限,应当关闭页面。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'user-permission-change') {
      console.log('当前文档id', event.data.data.fid)
      console.log('当前用户角色', event.data.data.userPermission)
    }
  },
  false
)

# began-create-annotation

时机:用户点击批注按钮时。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'began-create-annotation') {
      console.log('当前文档id', event.data.data.fid)
      console.log('将要创建的批注id', event.data.data.annotationGid)
    }
  },
  false
)

# create-annotation

时机:用户创建批注时。

说明error 不为空时,表示创建批注失败。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'create-annotation') {
      console.log('创建批注存在错误', event.data.error)
      console.log('当前文档id', event.data.data.fid)
      console.log('删除的批注id', event.data.data.annotationGid)
    }
  },
  false
)

# delete-annotation

时机:用户删除批注时。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'delete-annotation') {
      console.log('当前文档id', event.data.data.fid)
      console.log('删除的批注id', event.data.data.annotationGid)
    }
  },
  false
)

# get-mention-info-list

时机:用户开始@(提及)时。

说明:会同时传递用户输入的内容,需要根据内容返回文档或用户列表。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'get-mention-info-list') {
      console.log('当前 @ 搜索 关键词', event.data.data.keyword)
      // 获取要加载的联系人信息和文档信息
      iframeElement.contentWindow.postMessage(
        {
          action: 'set-mention-user-list',
          data: {
            userInfoDTOList: [],
          },
        },
        '*'
      )
    }
  },
  false
)

# insert-mention

时机:用户开始@(提及)时。

说明:可以在外部系统如 IM 中发送通知。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'insert-mention') {
      console.log('当前文档id', event.data.data.fid)
      console.log(
        '@ 信息类型  user 为联系人 ,note 为文档',
        event.data.data.type
      )
      console.log('@ 信息 联系人名称 ', event.data.data.name)
      console.log('@ 信息 文档id ', event.data.data.fileFid)
    }
  },
  false
)

# mention-doc-click

时机:用户点击提及的文档时。

说明:需要处理点击事件,打开文档或者其他行为。

必须:是。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'mention-doc-click') {
      console.log('当前文档id', event.data.data.fid)
      console.log('当前文档类型', event.data.data.docType)
    }
  },
  false
)

# file-not-exist

时机:文档不存在时。

说明:比如在其他端被删除了,建议做关闭页面处理。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'file-not-exist') {
      console.log('当前文档id', event.data.data.fid)
    }
  },
  false
)

# content-syn-status

时机:内容同步状态变更时。

说明:可以更新文档状态等视图。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'content-syn-status') {
      console.log('当前文档id', event.data.data.fid)
      console.log('当前同步状态', event.data.data.status)
      console.log('内容更新来源', event.data.data.source)
    }
  },
  false
)

备注

同步状态:

  • initial: 协作建立成功
  • saving: 内容更新
  • saveSuccess: 内容更新成功
  • saveError: 内容更新失败

内容更新来源:

  • local: 本地编辑
  • ws: 远程更新

# note-name-change

时机:文档标题变更时。

说明:可以更新外部显示标题的视图。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'note-name-change') {
      console.log('当前文档id', event.data.data.fid)
      console.log('新笔记标题', event.data.data.noteName)
    }
  },
  false
)

# file-metadata

时机:元数据变更时。

说明:第一次加载时,此消息也会传递现有的元数据内容。按需处理元数据变更时的行为。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'file-metadata') {
      console.log('当前文档id', event.data.data.fid)
      console.log('元数据', event.data.data.metadata)
    }
  },
  false
)

# active-connections

时机:协作用户变更时。

说明:第一次打开,以及后续建立连接的协作者变化时,都会触发。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'active-connections') {
      console.log('当前文档id', event.data.data.fid)
      console.log('协作用户信息列表', event.data.data.activeConnections)
    }
  },
  false
)

# doc-html

时机:发送接口消息 get-doc-html 消息后。

说明:返回 HTML 内容,不包含内联 CSS 样式。

必须:否。

示例

window.addEventListener(
  'message',
  event => {
    if (event.data.action === 'doc-html') {
      console.log('当前文档的 HTML 格式', event.data.data.html)
    }
  },
  false
)