Skip to content

类型与枚举

本页汇总浏览器端 SDK(@atkonoffice/sdk)的接口签名、事件负载、比对 diff 结构,以及服务端打开模式等枚举。用法示例见通用控制Word

浏览器端 SDK 是单一命名空间对象 atkonoffice,分两个使用面:

命名空间运行位置接口
atkonoffice.*业务网页(外层浏览器页)config / open / on
atkonoffice.session.*承载编辑器的页面(客户端内编辑页)on / save / setSavePath / 工具条 / 拦截 / word

绝大多数集成只用到 atkonoffice.*session.* 仅在用自带登录校验的业务页直接承载编辑器、需在编辑页内定制时才用到;客户端外普通浏览器里所有 session 动作都是无害 no-op。


atkonoffice.config(opts)

配置后台长跑所需的参数。返回 atkonoffice 自身,可链式。

字段类型必填说明
backendBasestring业务后端的源,拉起链端点所在处。open() 前必须配置。
launchPathstring拉起端点路径,默认 /atkonoffice/rpc/launch
wsTicketPathstring事件通道重连 / 续订票据端点路径,默认 /atkonoffice/rpc/ws-ticket
fetchImpltypeof fetch自定义 fetch 实现(测试用)。
trustedFrameOriginsstring[]跨域 iframe 集成时的子帧源白名单;不设为宽松(向后兼容)。

atkonoffice.open(req)

拉起编辑窗口。返回 Promise<AtkonofficeOpenResult>。装机检测与引导由 open() 内部自管。

AtkonofficeOpenRequest

字段类型说明
pageApistringhost-page 路由路径(相对路径,拼到后端源)。指向业务后端用 AtkonofficeCtrl 挂的路由;不填则客户端加载内建默认宿主页。
pageUrlstring业务页 URL(绝对)。让客户端导航到集成方自建的编辑承载页;省略则走内建默认宿主页。
paramsRecord<string, string>业务参数袋(值均字符串)。模型键:docId(打开 / 保存所指文档,默认宿主页模式下必填)、compareDocId(Word 比对目标,非空则进比对模式)、user(终端用户显示名);其余为自定义业务键(如 bizType),全量透传进 pageApi 端点 query 用于分流。
headersRecord<string,string> | Array应用到数据面请求的额外 HTTP 头。
cookieRecord<string,string> | string序列化进 Cookie 头。
storageRecord<string,string>两用途:序列化进数据面请求头做后端鉴权;并注入编辑页 localStorage,让已有登录守卫在客户端内通过。
optionsAtkonofficeWindowOptions弹窗几何。

AtkonofficeWindowOptionswidth(默认 1280,200–9999)/ height(默认 960)/ modal(默认 false)。

打开模式不在这里传——由后端在 pageApi 路由里用 AtkonofficeOpenMode 裁决;浏览器只透传 params

AtkonofficeOpenResult

字段类型说明
launchUrlstring已签发的拉起链。
downloadUrlstring文档取用 URL。
pairIdstring本次拉起打开的订阅会合 id(不可得时为空串)。
wsUrlstring事件通道连接到的 WS 端点(不可得时为空串)。

atkonoffice.on(event, handler)

订阅文档生命周期与连接状态事件。链式返回 atkonoffice

事件负载时机
documentOpenedAtkonofficeDocOpened文档打开完成(编辑会话已就绪)。
documentBeforeSaveAtkonofficeDocBeforeSave即将保存(通知式,不能取消保存)。
documentSavedAtkonofficeDocSaved保存完成(业务闭环信号)。
shellClosedAtkonofficeShellClosed编辑器窗口已不在(正常关闭 / 异常消失),本次编辑会话确定结束。
channelLostAtkonofficeChannelLost本页与服务器的事件通道断开(每次失联只派发一次)。
channelRestoredAtkonofficeChannelRestored事件通道恢复、订阅已重建,回推继续送达。
errorAtkonofficeError发起打开之后的运行期异常(事件通道失败、打开命令未送达等),带稳定错误码——见错误对象

事件负载

负载字段均可选,页面应对缺省容错(向前兼容)。

AtkonofficeDocSaved

字段类型说明
doc_idstring保存的文档 id(回显拉起时的 docId)。
okboolean是否成功;false 时带 message
saved_atnumber保存完成的 Unix 秒。
bytes_savednumber写入字节数(有上报时)。
version_nonumber保存后的单调文档版本号(有上报时)。
messagestringok=false 时的失败详情。
pair_idstring本次保存所属的会合 id。
saveTypesstring[]本次保存产出的产物 role 列表(恒为列表形态):缺省单件保存回 ["source"],声明了派生产物的保存回如 ["source","pdf"] 或纯 ["pdf"]。取代旧单值 saveType 字段。

AtkonofficeDocOpeneddoc_id / opened_at(Unix 秒)/ pair_idAtkonofficeDocBeforeSavedoc_id / pair_id

AtkonofficeShellClosedshellClosed——编辑器窗口已不在,页面可据此复位「编辑中」状态)

字段类型说明
reasonstring"user_close" = 终端用户正常关闭编辑器窗口(即时送达);"shell_gone" = 编辑器异常消失(进程崩溃 / 被强杀,或仅编辑器那条连接被单独掐断超过宽限期),由服务端在宽限期后代为通知。前向兼容字符串——后续可能追加取值,不要穷举 switch
  • "shell_gone" 有延迟:宽限期(默认约两分钟,由服务端 shell-gone-grace-sec 配置)+ 至多一个心跳周期;连接被静默掐断时还要再加一个空闲判死周期。宽限期届满前刷新页面会丢掉这条通知(刷新本来就意味着从头开始)。
  • 两格刻意不覆盖,设计页面时留意:① 编辑器连接短暂抖动——宽限期内自己接回来,什么都不发;反之掐断超过宽限期时编辑器可能其实还活着(服务端分不出两者,复位页面是刻意取舍)。② 终端用户整机断电 / 断网 / 休眠——编辑器与业务页在同一台机器上,那时本页连接一起断,走 channelLost / channelRestored 那对事件,恢复后编辑会话一般还活着。不要拿这条通知去释放服务端侧的「正在编辑」锁——那一格等不到它。
  • channelLost 的分工:shellClosed 说「对面没了」(本页通道健康),channelLost 说「本页通道断了」(编辑器可能好好的)。

AtkonofficeChannelLostchannelLost——本页事件通道断开;每次失联只派发一次,不随重试重复派发)

字段类型说明
reasonstring"unreachable" = 后端暂时不可达(重部署 / 断网),SDK 已转低频探测、恢复后有配对的 channelRestored"rejected" = 服务端明说重连无济于事,不会channelRestored,只有重新打开文档能恢复。前向兼容字符串。
  • on('error') 分层并存、不替代:同一时刻错误面也会派发对应错误(ws_backoff_exhausted / ws_gave_up),两层挑一层处理即可,别两层都接。这对事件是新集成的推荐层——它有配对的恢复信号,错误面没有(「恢复了」不是错误)。
  • ⚠️ 一条例外,只订这对状态事件的页面必须额外盯一个错误码:「自动恢复期间放弃」(某轮探测连上了、随即被服务端永久拒绝)不会有第二条 channelLost、也不会channelRestored——唯一的信号是错误面的 ws_gave_upterminal: true)。漏接它,页面会永久停在「正在自动恢复」。

AtkonofficeChannelRestoredchannelRestored——通道恢复、订阅已重建):当前无字段(状态信号,为可扩展声明为对象)。它只说明本页重新连上了服务器,不保证编辑会话还活着——编辑器可能已在中断期间被关闭。


错误对象 AtkonofficeError

浏览器端 SDK 自身产生的每一个错误——open() reject 出的、以及 on('error') 派发的——都带稳定的 codecategory 字段。code / category 分流,不要匹配 message 文案:message 是给开发者读日志用的英文串,会随版本调整措辞;稳定的是 code。

字段类型说明
codestring逐失败出口可区分的稳定短标识(见下表),唯一适合编程分流的字段。
category'config' | 'launch' | 'channel'粗分三档兜底:config = 接入 / 宿主环境问题(重试无用);launch = 拉起腿失败;channel = 运行期事件通道异常(多为瞬态)。
terminalboolean(仅两条通道出口带)ws_gave_up 上为 true(通道永久丢失,只有重新打开文档能恢复);ws_backoff_exhausted 上为 false(已转低频探测,后端恢复后自愈)。其余错误没有此字段。

两个投递面互斥:发起阶段的失败由 open() reject(下表标 △ 的 7 条),其余经 on('error') 异步派发。其中 launch_open_frame_send_failed 是唯一一条在 open() 已成功返回之后才到达的 launch 类错误——看起来打开成功了,实际打开命令没送到客户端。

词表(按 category 分组;△ = open() reject):

code含义
config —— 接入 / 宿主环境问题,重试无用
backend_base_missingopen() 前没调 config({ backendBase })
doc_id_missing不传 pageUrl 的打开方式下 params.docId 也没给——下载 / 保存都无锚。
fetch_unavailable宿主既无全局 fetch、config 也没注入 fetchImpl
ws_unsupported宿主没有 WebSocket,事件通道开不起来(文档仍可正常编辑与保存,但收不到回推)。
ws_ticket_backend_missing通道续订时后端基址仍未配置。
ws_ticket_node_mismatch多实例部署下,本会话的续订请求被另一个实例受理——部署侧路由规则问题,见部署要求 · 多实例部署
launch —— 拉起腿
launch_request_failed拉起请求根本没发出去:后端没起 / 断网 / 跨域被拦,或传入参数无法序列化。联调期最高频
launch_http_error拉起端点返回非 2xx。
launch_response_not_json拉起端点 2xx 但响应不是 JSON——典型是网关 / 反代返了自己的 HTML 错误页。联调期高频
launch_response_invalid响应是 JSON 但缺关键字段。
launch_open_frame_send_failed打开命令未能送达客户端(在 open() 成功返回之后异步到达)。
channel —— 运行期事件通道
ws_url_missing手里没有通道端点地址,无从连起。
ws_ticket_missing手里没有一次性接入凭据,无法订阅。
ws_connect_failedWebSocket 构造即失败(地址非法 / 宿主拒绝)。
ws_error已建立的通道上报错(随后自动重连)。
headers_frame_send_failed会话级请求头未能送达(客户端将以无额外头打开)。
ws_no_pair_to_resume通道断了且已无可恢复的会话。
ws_backoff_exhausted快速重连耗尽、已转低频探测(非终态terminal: false):后端恢复后自动接上。宜提示「正在后台重试」,不要引导用户重开文档。
ws_gave_up服务端明确告知重连无济于事(终态terminal: true):只有重新打开文档能恢复。
ws_ticket_http_error通道续订端点返回非 2xx。
ws_ticket_response_invalid续订响应缺关键字段。
ws_ticket_refresh_failed续订请求本身失败(网络异常 / 响应非 JSON)。

三条使用纪律:

  1. 词表是开放的——后续版本会追加出口,switch (err.code) 必须保留 default 分支;宿主环境自身抛出的异常(如集成方替换过的 fetch 实现)仍可能是不带 code 的原生错误。
  2. 该词表与客户端失败提示上显示给终端用户的错误码是两套语义域,互不对齐、不可互相映射——前者面向业务页代码分流,后者面向用户报给管理员。
  3. 编辑页侧(session.on('error'))当前没有任何会派发带 code 对象的错误出口,本表只覆盖业务页(atkonoffice.*)一侧。

分流示例见通用控制 · 生命周期事件回流


atkonoffice.session.*

编辑承载页子命名空间。客户端外普通浏览器里所有动作均无害 no-op。

session.on(event, handler)

事件负载说明
documentSaved / documentOpened / documentBeforeSaveAtkonofficeSessionEvent文档生命周期事件。
controlReadyAtkonofficeSessionEvent控件就绪、session 动作可调(非「文档内容就绪」)。负载尽力而为,可能为空。
compareDiffAtkonofficeCompareDiffWord 比对的结构化 diff(仅编辑页内可拿,含原文,不出域)。
errorError通道异常。编辑页侧当前没有带错误码的错误出口,负载按普通 Error 处理(错误码词表只覆盖业务页一侧)。

方法

方法说明
save(opts?)触发保存,多产物保存的唯一入口opts.savePath相对路径/ 起始,禁 ://)指定本次上传目标,客户端把它接在本次打开所用的后端地址(完整值,含反向代理 / 多实例部署带的路径前缀)之后;opts.formats(如 ['source','pdf'])声明本次产出哪些产物,客户端逐 role 生产后恰发一次原子 multipart POST(缺省 = 只存原格式 source,纯 ['pdf'] 合法;未知 role / 空数组整次保存失败);其余字段随保存作表单字段 POST。formatssavePath 正交。不传 opts = 普通单件保存。
setSavePath(path)改后续所有保存(含 Office 原生保存按钮)的默认上传目标(有状态便利口)。跨信道无顺序保证时优先 save({ savePath })
onBeforeSave(fn)注册「保存前」可阻断回调(返回 false / reject → 取消;true / undefined / 抛错 / 超时 → 放行)。链式。
onBeforeClose(fn)注册「关闭前」可阻断回调,语义同上。链式。
addCustomToolButton(caption, iconIndex, onClick)追加按钮。iconIndex1..N 内置图标,0 / 省略 / 越界 = 纯文字。返回句柄(含 remove());客户端外返回 null
setCustomToolbarVisible(visible)整体显隐自定义工具条。visible 非布尔抛 TypeError。链式。
showMessageBox(opts?)弹出原生提示 / 确认框(显示在文档之上、不被遮挡)。opts.typeinfo(默认)/ confirm / warning / erroropts.buttonsok(默认)/ okCancel / yesNo / yesNoCancel;另有 title / text。返 Promise永不 reject——resolve 出 { ok, button }ok:truebuttonok / cancel / yes / no;客户端外 / 非法参数 / 保存进行中 → { ok:false }。用法见 通用控制 · 弹出提示与确认框

onBeforeSave / onBeforeClosefn 非函数时抛 TypeError

session.word.*

Word 数据区域(命名的锁定填充位)子命名空间(异步返 Promise,仅 Word;客户端外 / 只读 / 失败 / 超时 → 无害降级)。数据区域内容终端用户不能手动改动或删除,只能经这些方法维护。用法见 Word · 数据区域

方法说明
fillDataRegion(name, value)编辑中即时把数据区域 name 的值改为 value。命中并改值成功 → true;文档无此名字 / 只读态 / 客户端外 / 失败 → false
addDataRegion(name, caption?)光标处插 caption 占位并建锁定数据区域 name。resolve 是否成功。
deleteDataRegion(name)删除数据区域 name(不存在按宽松策略 no-op)。
locateDataRegion(name)定位 / 选中数据区域 name
listDataRegions(prefix?)列已插入的数据区域名。prefix 省略默认按 AO_ 前缀过滤;显式空串 '' 返全部数据区域名。resolve string[]

打开模式与文档族枚举

AtkonofficeOpenMode

传给 AtkonofficeCtrl.webOpen / open 的第二个参数:

常量序号适用含义
NormalEdit2Word普通读写编辑
ReadOnly3Word只读查看
RevisionOnly0Word仅修订(track changes)
CommentOnly6Word仅批注
XlsNormalEdit7Excel普通读写编辑
XlsReadOnly8Excel只读查看
XlsSubmitForm9Excel提交表单编辑
PptNormalEdit10PPT普通读写编辑
PptReadOnly11PPT只读查看

辅助:fromName("NormalEdit")(按名,大小写不敏感)/ fromOpenType(2)(按序号)/ getOpenType()

DocFamily

webCreate 的文档族入参:

常量新建类型对应打开模式
WORD空白 .docxNormalEdit
EXCEL空白 .xlsxXlsNormalEdit
PPT空白 .pptxPptNormalEdit

辅助:getOpenMode() / getWireType()word/excel/ppt)/ fromWireType("word")

窗口外观枚举

  • AtkonofficeBorderStylesetWindowBorder):NONE(无边框无标题栏)/ SIZABLE(标准可缩放边框,默认)。
  • AtkonofficeThemesetWindowTheme):LIGHT / DARK / SYSTEM(跟随操作系统,默认)。

比对 diff

Word 比对的结构化 diff(session.on('compareDiff') 的负载 AtkonofficeCompareDiff),用法见 Word · 文档比对

  • 顶层:docId / compareDocId / summary / revisions
  • summaryAtkonofficeCompareDiffSummary):inserts / deletes / formatChanges / moves 计数;
  • revisionsAtkonofficeCompareDiffRevision[]):逐条修订,含类型、落在哪侧、坐标区间与原文文本。

它含文档内容,只在编辑页内可订阅,不回流到外层浏览器页


类型声明

SDK 随包发布 TypeScript 类型声明(@atkonoffice/sdktypes),主要接口:AtkonofficeConfig / AtkonofficeOpenRequest / AtkonofficeOpenResult / AtkonofficeWindowOptions / AtkonofficeDocSaved / AtkonofficeDocOpened / AtkonofficeDocBeforeSave / AtkonofficeSession / AtkonofficeSessionEvent / AtkonofficeSessionWord / AtkonofficeToolButtonHandle / AtkonofficeCompareDiff 及其子类型。

面向集成方的产品技术文档 · 不含实现细节