Как отправить внешние данные в плагин OnlyOffice

Я разрабатываю плагин onlyoffice, который должен использовать данные (например, reportid, подробности сеанса, которые будут использоваться для загрузки данных с сервера) из запуска приложения.

Структура страницы получится так:

стартовая страница (editor.aspx) - iframe 1 для загрузки редактора -- ifram 2 для загрузки плагина

Здесь я хочу получить доступ к данным из editor.aspx в iframe 2 (JavaScript)

Я пытался использовать queryString как window.parent.location.search но он может проходить только до iframe 1, но не до основной страницы aspx. Поскольку у меня нет контроля над тем, какие нагрузки в iframe 1, он не работал.

Также я попробовал с куки и localStorage, но ничего не получилось.

Пожалуйста, руководство..

2 ответа

Решение

стартовая страница (editor.aspx) - iframe 1 для загрузки редактора -- ifram 2 для загрузки плагина. Здесь я хочу получить доступ к данным из editor.aspx в iframe 2 (JavaScript)

Невозможно получить прямой доступ к iframe с помощью редактора, единственный способ работать с ним - использовать плагины сервера документов.

На самом деле есть способ... Потратив МНОГО времени на анализ происходящего... наконец-то нашел хороший способ обмена конфигами между TOP рамка и PLUGIN фрейм с несколькими строками кода, используя API -интерфейс onlyoffice - без каких-либо взломов:)

Редактор Config объекта:

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 Конфигурация объекта и хранить его в локальных плагинах config переменная автоматически - при нажатии на плагин на панели инструментов.

Изменять api.js файл с сервера onlyoffice для пересылки параметров строки запроса в плагин, и это работало примерно так.

 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;
    }
Другие вопросы по тегам