Skip to content

api cms return to cms

Konstantin V. Borisov edited this page Apr 12, 2022 · 1 revision

GET return-to-cms

Задача этого метода - вернуть Пользователя в контекст работы с CMS Партнёра. Его реализация зависит от того, какой способ интеграции с Сайтом был выбран Партнёром.

На странице Подготовка текста есть описание действий в связке с этим методом, пожалуйста, изучите её прежде чем продолжать.

Здесь же мы дадим некоторые варианты того, как может выглядеть страница return-to-cms в зависимости от того, какой вариант показа редактора литеры был выбран.

Запрос

Параметры этого запроса должны быть достаточны для того, чтобы вы могли перенаправить пользователя на нужную вам страницу сайта.

Ответ

Содержимое страницы будет зависеть от того, как был показан редактор Литеры для проверки и работы с текстом. Есть три возможных вариантов для этого: открыть одноразовую ссылку на редактор Литеры в том же окне браузера где и была страница сайта, открыть одноразовую ссылку на редактор Литеры в новом окне (заблокировав при этом текстовое поле с документом, чтобы пользователь случайно не отредактировал текст и в редакторе Литеры и в редакторе сайта), открыть одноразовую ссылку на редактор Литеры в этом же окне, но не перегружая страницу, а создав при помощи JavaScript объект iframe, который перекроет собой текстовый редактор Сайта.

Главное окно/закладка

Закрывание основного окна

С этим вариантом вроде всё просто. Страница сайта замещается редактором Литеры когда надо проверить текст и возвращается обратно, когда работа в редакторе Литеры завершена.

Новое окно/закладка

Закрывание нового окна

Этот вариант отличается от предыдущего тем, что в нём редактор Литеры открывается в новом окне/вкладке браузера и соответственно возникает две задачи:

  • первая - как-то предотвратить возможность редактирования текста на сайте партнёра в то же время, как пользователь может отредактировать этот же текст в редакторе Литеры
  • вторая - закрыть окно с редактором Литеры и передать управление в главное окно сайта, откуда отскочили поисправлять ошибочки в редактор Литеры

По первой задаче сложно чего-либо советовать, она зависит от скорее эстетических пожеланий, чем технических.

А вторую рассмотрим поподробнее. Мы предлагаем решать её на основе технологии современных браузеров Broadcast Channel API, если она удовлетворяет вашим требованиям к версии браузера. Если же нет, то можно посмотреть в сторону более поддерживаемой технологии Storage ну и самый "старинный вариант" - передать сообщение через собственный сервер, тогда на странице return-to-cms вообще ничего делать не придётся.

Итак, вот пример решения этой задачи при помощи Broadcast Channel API.

Начать слушать событие CLOSE_LITERA

На страницу с текстом и кнопкой "Проверить", после её нажатия, перед тем, как передавать управление редактору Литеры необходимо добавить такой JavaScript код:

// открываем новое окно с редактором Литеры
var litera = window.open(url);

// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');

bc.onmessage = function(event) {
  if (event.data === 'CLOSE_LITERA') {
    // закрываем окно с редактором Литеры
    litera.close();
    // делаем свои дела по обновлению содержимого страницы
    onLiteraClosed();
  }
}

Отправить событие CLOSE_LITERA

На страницу return-to-cms надо добавить такой JavaScript код:

// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');

// передаём в канал сообщение о том, что редактор Литеры пора закрывать
bc.postMessage('CLOSE_LITERA');

Встраивание iframe

Закрывание iframe

В целом этот вариант очень похож на предыдущий с той лишь разницей, что вместо нового окна браузера на текущей странице создаётся объект iframe с редактором Литеры внутри. То есть отличие лишь в способе создания объекта с редактором Литеры и способе его устранения. Однако так как мы находимся в рамках одного окна браузера, у нас появляется дополнительный способ передачи управления из iframe основному содержимому окна, а именно - обновление содержимого окна.

Обновление содержимого окна

Для этого в тело страницы return-to-cms надо добавить следующий JavaScript:

window.top.location.href = 'новый URL страницы с обновлённым текстом';

Передача управления из iframe без перезагрузки содержимого окна

Здесь все те же соображения, что и в случае с новым окном, но с небольшими изменениями в способе обращения с контейнером для редактора Литеры:

Начать слушать событие CLOSE_LITERA

На страницу с текстом и кнопкой "Проверить", после её нажатия, перед тем, как передавать управление редактору Литеры необходимо добавить такой JavaScript код:

// создаём iframe с редактором Литеры
var litera = document.createElement('iframe')
litera.setAttribute('src', url);
document.body.append(litera);

// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');

bc.onmessage = function(event) {
  if (event.data === 'CLOSE_LITERA') {
    // закрываем окно с редактором Литеры
    litera.remove();
    // делаем свои дела по обновлению содержимого страницы
    onLiteraClosed();
  }
}

Отправить событие CLOSE_LITERA

Тут и вовсе ничего не изменилось, на страницу return-to-cms надо добавить такой JavaScript код:

// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');

// передаём в канал сообщение о том, что редактор Литеры пора закрывать
bc.postMessage('CLOSE_LITERA');

Clone this wiki locally