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

时间:2017-12-13 14:30:58

标签: asp.net iframe onlyoffice

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

请指导..

3 个答案:

答案 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变量中-当您在工具栏中单击插件时。