1

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

页面结构如下:

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

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

我尝试使用 queryString 之类的window.parent.location.search,但它只能遍历到 iframe 1,但不能遍历主 aspx 页面。由于我无法控制 iframe 1 中的加载内容,因此它不起作用。

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

请指导..

4

2 回答 2

1

实际上有一种方法......花了很多时间分析发生了什么......终于找到了一种在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 } );

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

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

于 2019-04-03T01:10:39.237 回答
1

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

无法使用编辑器直接访问 iframe,使用它的唯一方法是使用文档服务器插件

于 2017-12-23T13:57:26.673 回答