如何将外部数据发送到 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
变量中 - 当您单击工具栏中的插件时。
我正在开发 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
变量中 - 当您单击工具栏中的插件时。