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

How to send external data to OnlyOffice plugin

我正在开发 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,但 none 成功了。

请指导..

launching page (editor.aspx) -- iframe 1 to load editor -- -- ifram 2 to load plugin. Here i want to access data from editor.aspx into iframe 2 (javascript)

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

实际上有一种方法...花了 很多 时间分析正在发生的事情...终于找到了一种在 [=12] 之间交换配置的好方法=] frame 和 PLUGIN frame 只有几行代码利用了 onlyoffice API - 没有任何 hacks :)

编辑器配置对象:

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 } );

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

访问它

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