Javascript: Как скопировать в буфер обмена без определенного пользовательского события - PullRequest
0 голосов
/ 11 февраля 2019

Я пишу веб-приложение, в котором клиенту необходимо скопировать данные в буфер обмена, как только они станут доступны.Данные должны быть скопированы, как только будет выполнен вызов REST, а не по событию пользователя.Возможно ли это без плагина для браузера?Какие разрешения мне нужны для этого?

Я только нашел эту статью, которая была полезной, но она была только для расширений браузера.

Так что это вызов ajaxкоторый запускается сервером через веб-сокеты, и когда это удается, я хочу записать в буфер обмена:

$.ajax({
    url: hosturl + '/get-data?id=' + cookieid
}).then(function(data) {
    // data is of type string
    if (data.type === 'STRING') {
        $('#content-container').html(data.stringData);
        // not working
        navigator.clipboard.writeText(data.stringData);
        // also not working
       $('#content-container').select();
       document.execCommand("copy");
    }

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете попробовать несколько хакерских способов скопировать ваши данные в буфер обмена.

Одним из методов является создание временного элемента, фокусировка и запуск действия.

function copyToClipboard(str) {
  var el = document.createElement('textarea');  // Create a <textarea> element
  el.value = str;                                 // Set its value to the string that you want copied
  el.setAttribute('readonly', '');                // Make it readonly to be tamper-proof
  el.style.position = 'absolute';                 
  el.style.left = '-9999px';                      // Move outside the screen to make it invisible
  document.body.appendChild(el);                  // Append the <textarea> element to the HTML document
  var selected =            
    document.getSelection().rangeCount > 0        // Check if there is any content selected previously
      ? document.getSelection().getRangeAt(0)     // Store selection if found
      : false;                                    // Mark as false to know no selection existed before
  el.select();                                    // Select the <textarea> content
  document.execCommand('copy');                   // Copy - only works as a result of a user action (e.g. click events)
  document.body.removeChild(el);                  // Remove the <textarea> element
  if (selected) {                                 // If a selection existed before copying
    document.getSelection().removeAllRanges();    // Unselect everything on the HTML document
    document.getSelection().addRange(selected);   // Restore the original selection
  }
};

Длядругие примеры, на которые вы можете ссылаться на эту статью

Более того, существует новый API - Clipboard API, но он доступен только для нескольких браузеров - Поддержка API буфера обмена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...