文档历史记录
文档编辑器可以显示文本文档、电子表格、演示文稿和PDF的版本历史记录。版本数据本身由文档存储服务存储——每次编辑会话结束后,ONLYOFFICE 文档会返回变更信息,集成商将其与文档一起保存。然后,文档编辑器在侧面板中将此历史记录显示为版本列表,用户可以选择任何版本进行预览。
以下图表和步骤解释了在ONLYOFFICE 文档中查看文档历史记录的工作方式。
- 用户在文档编辑器中点击版本历史记录按钮。
- 文档编辑器向文档存储服务请求文档版本列表。
- 文档存储服务返回版本列表,包括要显示的版本。
- 文档编辑器向文档存储服务请求所选版本的数据。
- 文档存储服务返回所选版本文件的链接。
- 文档编辑器显示所选版本。如果用户选择其他版本,则重复步骤4–6。
- 用户点击关闭历史记录按钮,文档编辑器返回正常编辑模式。
实际操作方法
-
创建一个
.html文件,用于打开文档。 -
在编辑器配置中添加onRequestHistory事件处理程序。当用户打开版本历史记录时,此事件将触发。在处理程序中,调用refreshHistory方法并传入完整的版本列表。要突出显示每个版本中的各个更改,请按照突出显示更改中的说明传递额外数据。
function onRequestHistory() {docEditor.refreshHistory({currentVersion: 2,history: [{created: "2010-07-06 10:13 AM",key: "af86C7e71Ca8",user: {id: "F89d8069ba2b",name: "Kate Cage",},version: 1,},{created: "2010-07-07 3:46 PM",key: "Khirz6zTPdfd7",user: {id: "78e1e841",name: "John Smith",},version: 2,},],})};const config = {events: {onRequestHistory,},};const docEditor = new DocsAPI.DocEditor("placeholder", config); -
添加onRequestHistoryData事件处理程序。当用户从列表中选择一个版本时,此事件将触发并传入版本号。在处理程序中,调用setHistoryData方法并传入该版本文件的绝对URL。
调用
setHistoryData时,必须包含token以验证参数。function onRequestHistoryData(event) {const version = event.datadocEditor.setHistoryData({fileType: "docx",key: "Khirz6zTPdfd7",token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwidXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS91cmwtdG8tZXhhbXBsZS1kb2N1bWVudC5kb2N4IiwidmVyc2lvbiI6Mn0.iRcdHve235L5K1e29SmUBkuHcxb63WHRko51WMJlmS0",url: "https://example.com/url-to-example-document.docx",version: 2,})};const config = {events: {onRequestHistoryData,},};const docEditor = new DocsAPI.DocEditor("placeholder", config);
-
添加onRequestRestore事件处理程序。当用户点击恢复按钮时,此事件将触发并传入所选版本的数据。在处理程序中,将恢复的版本保存到您的服务器上,然后调用refreshHistory重新加载版本列表。
function onRequestRestore(event) {const fileType = event.data.fileTypeconst url = event.data.urlconst version = event.data.versiondocEditor.refreshHistory({currentVersion: 2,history: [{created: "2010-07-06 10:13 AM",key: "af86C7e71Ca8",user: {id: "F89d8069ba2b",name: "Kate Cage",},version: 1,},{changes,created: "2010-07-07 3:46 PM",key: "Khirz6zTPdfd7",serverVersion,user: {id: "78e1e841",name: "John Smith",},version: 2,},],})};const config = {events: {onRequestRestore,},};const docEditor = new DocsAPI.DocEditor("placeholder", config);

-
添加onRequestHistoryClose事件处理程序。当用户点击关闭历史记录按钮时,此事件将触发。在处理程序中,重新初始化编辑器为编辑模式——例如,通过重新加载页面。
function onRequestHistoryClose() {document.location.reload()};const config = {events: {onRequestHistoryClose,},};const docEditor = new DocsAPI.DocEditor("placeholder", config);

-
在浏览器中打开您的
.html文件。 -
在文档编辑器菜单中打开版本历史记录选项。
突出显示更改
如果文档版本是使用文档编辑器创建的,则在查看历史记录时可以突出显示该版本中的各个更改。要启用此功能,文档存储服务必须保存ONLYOFFICE 文档在保存每次编辑会话时返回的额外数据。
当服务器版本更新时,文档编辑器不会使用changes数据来突出显示历史记录中的更改。它只会在changesurl参数中返回已更改的文档。
除了已更改的文档本身之外,文档编辑服务还会发送:
-
history——包含每个更改的时间戳和作者,显示在版本历史记录侧面板中。将此数据作为传递给refreshHistory的对象中每个版本的
changes属性传递。docEditor.refreshHistory({currentVersion: 2,history: [{created: "2010-07-06 10:13 AM",key: "af86C7e71Ca8",user: {id: "F89d8069ba2b",name: "Kate Cage",},version: 1,},{changes,created: "2010-07-07 3:46 PM",key: "Khirz6zTPdfd7",serverVersion,user: {id: "78e1e841",name: "John Smith",},version: 2,},],})其中
changes和serverVersion是保存文档后从历史记录对象返回的值。备注ONLYOFFICE 文档会突出显示从当前文档会话开始所做的更改,而不是从文档版本开始时的更改。即使在一个会话期间创建了多个文档版本,该会话中的所有更改都将被突出显示。因此,您无法在文档历史记录中看到使用强制保存选项创建的文档版本。
-
changesurl——包含编辑数据的zip文件的绝对URL,用于突出显示特定版本的更改。保存此文件,并在调用setHistoryData时将其地址作为
changesUrl参数传递。还必须在previous.url中包含前一个文档版本的链接。调用
setHistoryData时,必须包含token以验证参数。docEditor.setHistoryData({changesUrl: "https://example.com/url-to-changes.zip",fileType: "docx",key: "Khirz6zTPdfd7",previous: {fileType: "docx",key: "af86C7e71Ca8",url: "https://example.com/url-to-the-previous-version-of-the-document.docx",},token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaGFuZ2VzVXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS91cmwtdG8tY2hhbmdlcy56aXAiLCJmaWxlVHlwZSI6ImRvY3giLCJrZXkiOiJLaGlyejZ6VFBkZmQ3IiwicHJldmlvdXMiOnsiZmlsZVR5cGUiOiJkb2N4Iiwia2V5IjoiYWY4NkM3ZTcxQ2E4IiwidXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS91cmwtdG8tdGhlLXByZXZpb3VzLXZlcnNpb24tb2YtdGhlLWRvY3VtZW50LmRvY3gifSwidXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS91cmwtdG8tZXhhbXBsZS1kb2N1bWVudC5kb2N4IiwidmVyc2lvbiI6Mn0.ril3Ol3rvYne3g0dG8TdKCiwJ7-7kkYGc6-XWMvp8FU",url: "https://example.com/url-to-example-document.docx",version: 2,})注意changesurl请求是在浏览器中从添加的具有documentserver域的iframe中发出的,其中documentserver是安装了ONLYOFFICE 文档的服务器名称。为了正常运行,必须允许跨源HTTP请求(CORS)。这可以通过使用Access-Control-Allow-Origin标头来实现。您可以注册一个免费的ONLYOFFICE云,并使用其公共IP地址或公共DNS,这些可以在云控制台的实例部分找到。