如何将外部数据发送到 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 插件的主要内容,如果未能解决你的问题,请参考以下文章
使用docker安装onlyoffice Document Server,同时解决中文乱码