Подтвердить что ты не робот

Скопировать в буфер BINARY данные в браузерах

Уровень техники в функции Копировать в буфер обмена (Мои исследования)

Альтернатива Flash

Альтернатива HTML5

В проекте есть API для стандартизации событий буфера обмена, но на данный момент он не реализован ни в одном браузере http://dev.w3.org/2006/webapi/clipops/

Реализация Rails/Zclip

Я использую zclip (на основе zeroclipboard) для копирования текста из службы restfule в системный буфер обмена:

$('.copy-to-clipboard').zclip
  path:'/ZeroClipboard.swf'
  setHandCursor: true
  copy: -> 
    ajaxReturn = $.ajax
     type: 'GET'
     async: false
     url: '/resources/copy_to_clipboard/' + $(this).attr("class").match(/[0-9]+/)
    return ajaxReturn.responseText

Это coffeescript.

Если служба (/resources/copy_to_clipboard/) служит для текста, она копируется вправо. Но если он сервер DOCX файла, он не копируется прямо в буфер обмена. Взгляните на контроллер рельсов:

  def copy_to_clipboard
    send_file @resource.resource_content.content.file.file, :type => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  end

Вопрос

Вы в любое время решили копировать данные BINARY в буфер обмена? и как?

Спасибо

4b9b3361

Ответ 1

Я прочитал API-интерфейс буфера обмена и события и напишу следующий код, и это работает для меня. Единственная проблема связана с значением NULL (0x0). Способ использования кода устанавливает массив x с вашими желаемыми двоичными значениями и вызывает функцию document.execCommand('copy'), поздравляя ваши данные с буфером обмена!

var x = [0x1b, 0x68, 101, 108, 108, 0x6f, 0x7, 0x8];
var button = document.getElementById("copy-button");

button.addEventListener("click", function() {
  document.execCommand('copy');
}, false);

document.addEventListener('copy', function(e) {
  var str = '';
  x.forEach(function(d) {
    str += String.fromCharCode(d)
  })
  //You can ignore setting third parameter value
  e.clipboardData.setData('text', str, true);
  console.info('data copied');
  e.preventDefault();
});
<button type="button" id="copy-button">Copy to clipboard</button>