我正在开发onlyoffice插件,它需要使用启动应用程序的数据(如reportid,将用于从服务器加载数据的会话详细信息)。
页面结构如下:
启动页面(editor.aspx) - iframe 1加载编辑器 - - ifram 2加载插件
这里我想访问editor.aspx中的数据到iframe 2(javascript)
我尝试使用像window.parent.location.search
这样的queryString,但它只能遍历iframe 1,而不能遍历主aspx页面。由于我无法控制iframe 1中的负载,因此无法正常工作。
我也尝试过使用cookies和localStorage,但没有成功。
请指导..
答案 0 :(得分:1)
启动页面(editor.aspx) - iframe 1加载编辑器 - - ifram 2 加载插件。在这里,我想从editor.aspx访问数据到iframe 2(javascript)
无法使用编辑器直接访问iframe,使用document server plugins
的唯一方法是使用它答案 1 :(得分:0)
从onlyoffice服务器修改api.js
文件,将查询字符串参数转发给插件,这样就可以了。
function getQueryStringOfParentPage() {
var queryString = "";
try {
queryString = window.parent.location.search.replace('?', '');
} catch (e) {
console.log("getQueryStringOfParentPage::" + e.message );
}
return queryString;
}
function createIframe(config) {
var parentPageQueryString = getQueryStringOfParentPage();
var iframe = document.createElement("iframe");
iframe.src = getAppPath(config) + getAppParameters(config) + "&" + parentPageQueryString;
iframe.width = config.width;
iframe.height = config.height;
iframe.align = "top";
iframe.frameBorder = 0;
iframe.name = "frameEditor";
iframe.allowFullscreen = true;
iframe.setAttribute("allowfullscreen",""); // for IE11
iframe.setAttribute("onmousewheel",""); // for Safari on Mac
return iframe;
}
答案 2 :(得分:0)
实际上,有一种方法...花了很多的时间来分析发生了什么...最终找到了一种在TOP
框架和{之间交换配置的好方法{1}}框架,仅使用几行代码,就利用了onlyoffice API-没有任何黑客:)
编辑器配置对象:
PLUGIN
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
配置对象,并将其自动存储在插件本地config.document
变量中-当您在工具栏中单击插件时。