Работа с буфером обмена

Введение

Веб-приложение online.sbis.ru предоставляет возможность сохранять и пересылать среди клиентов ссылки на документы, параметры фильтров и другие данные посредством копирования в буфер обмена.

Для взаимодействия с буфером обмена используют кроссбраузерное решение — контрол Clipboard/clipboards:Clipboard. Он предоставляет API для взаимодействия с буфером обмена через API веб-браузера, СБИС Плагина или диалоговое окно.

Далее в порядке убывания приоритета приведён список средств, которыми Clipboard/clipboards:Clipboard пытается взаимодействовать с буфером обмена:

  1. Нативные методы веб-браузера.
  2. СБИС Плагин.
  3. Диалоговое окно. Пользователь вручную копирует/добавляет данные через Ctrl + C(V).

Ограничения

Нативные методы у браузера

Пользовательское событие

Для копирования данных нативными средствами веб-браузера необходимо пользовательское событие (клик или нажатие клавиши). По этой причине метод копирования (см. API) не срабатывает просто так:

// Нет события клика.
import {Clipboard} from 'Clipboard/clipboards';
import {IoC} from 'Env/Env';
 
class MyClass {
    private _clipboard: Clipboard = new Clipboard();
    copy(): void {
        this._clipboard.setText('Hello world').catch(() => {
            IoC.resolve('ILogger').error('Попытка записи без пользовательского действия');
        });
    }
};

Получение данных

Получение данных из буфера обмена не поддерживается нативными средствами веб-браузера. Получение данных сразу осуществляется через СБИС Плагин.

Ограничение связано с политикой безопасности веб-браузеров.

СБИС Плагин

При работе с буфером обмена через СБИС Плагин накладывается временная задержка, которая состоит из:

  • создания подключения к СБИС Плагину (~5-10 секунд);
  • загрузки модулей СБИС Плагина;
  • загрузки модуля реализации копирования через СБИС Плагин.

Для клиента это выглядит следующим образом:

  1. нажатие на кнопку;
  2. долгое ожидание;
  3. загрузка/получение данных из СБИС Плагина;
  4. в случае, когда плагин не используется, происходит отображение диалога для копирования.

В ряде сценариев на клиентской стороне либо отсутствует СБИС Плагин вовсе (например, в ОС CentOS), либо он не используется веб-приложением (например, Управление облаком).