如何将外部数据发送到 OnlyOffice 插件

Posted

技术标签:

【中文标题】如何将外部数据发送到 OnlyOffice 插件【英文标题】:How to send external data to OnlyOffice plugin 【发布时间】:2017-12-13 14:30:58 【问题描述】:

我正在开发 onlyoffice 插件,它需要在启动应用程序时使用数据(如 reportid、将用于从服务器加载数据的会话详细信息)。

页面结构如下:

启动页面 (editor.aspx) -- iframe 1 加载编辑器 -- -- ifram 2 加载插件

这里我想将 editor.aspx 中的数据访问到 iframe 2 (javascript)

我尝试使用像window.parent.location.search 这样的queryString,但它只能遍历到iframe 1,但不能遍历主aspx 页面。因为我无法控制 iframe 1 中的加载内容,所以它不起作用。

我也尝试过使用 cookie 和 localStorage,但都没有成功。

请指导..

【问题讨论】:

【参考方案1】:

启动页面 (editor.aspx) -- iframe 1 加载编辑器 -- -- ifram 2 加载插件。在这里,我想将 editor.aspx 中的数据访问到 iframe 2 (javascript)

无法使用编辑器直接访问 iframe,使用它的唯一方法是使用 document server plugins

【讨论】:

【参考方案2】:

实际上有一种方法...花了 LOT 时间分析正在发生的事情...终于找到了一种在 TOP 框架和 PLUGIN 之间交换配置的好方法只需几行代码即可使用 onlyoffice API 的框架 - 无需任何黑客攻击 :)

编辑器配置对象:

config: 
    "width"       : "100%",
    "height"      : "100%",
    "type"        : "desktop",
    "documentType": "text",
    "token"       : "token",
    "document"    : 
        "title"      : "document.name",
        "url"        : "downloadUrl",
    
    ...
    
    events: 
        'onReady': <application ready callback>, // deprecated
        ...
        'onInfo': function ( data ) 
            if ( data && data.data && data.data.getConfig ) 
                docEditor.serviceCommand ( 'getConfig', config.document );
            
        
    


var docEditor = new DocsAPI.DocEditor("placeholder", config);

onInfo 事件将收到来自您插件的请求。 需要检查事件数据有getConfig属性。 如果是,请将配置发送回插件。

在您的插件的index.html 中添加包含此内容的内联脚本标签:

// config ref
var config;

// Get ready to receive the response from TOP
window.parent.Common.Gateway.on ( 'internalcommand', ( data ) => 
    if ( data.command === 'getConfig' ) 
        config = data.data;
    
 );

// Send custom config request to TOP
window.parent.Common.Gateway.sendInfo (  getConfig: true  );

它订阅TOP将调用的internalcommand网关事件,然后通过调用sendInfo命令启动通信过程。因为编辑器和您的插件(很可能)将托管在同一个域中,所以您可以通过 window.parent 参考访问它。

这将下载config.document 配置对象并将其自动存储在插件本地config 变量中 - 当您单击工具栏中的插件时。

【讨论】:

这很成功,谢谢!

以上是关于如何将外部数据发送到 OnlyOffice 插件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Go 外部插件与 Telegraf 交互?

使用docker安装onlyoffice Document Server,同时解决中文乱码

基于Docker 部署 Seafile+OnlyOffice+Wiki插件

如何将ONLYOFFICE与Nextcloud集成

如何修复 onlyoffice 一些文档丢失的页眉和页脚

如何使用 ONLYOFFICE API 在 Presentation 中添加表格?