19

复制到剪贴板功能的最新技术(我的调查)

闪存替代品

  • 我找到了以下替代方案:
    • Zclip:我们正在使用
    • zeroclipboard(祖先,zclip 使用它的按钮 flash 电影):只有文本
    • Clippy:页面中只有文本https://github.com/mojombo/clippy
  • 您可以在 (ActionScript:Flash) 代码中看到:http ://code.google.com/p/zeroclipboard/source/browse/trunk/ZeroClipboard.as (第 77 行)
  • 他们使用 System.setClipboard(cliptText) 调用,它只支持纯文本字符串,正如我们在 Adob​​e AIR API 参考中看到的那样:http: //help.adobe.com/en_US/air/reference/html/flash/system/System .html
  • 所以我们不能通过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

这是咖啡脚本。

如果服务 (/resources/copy_to_clipboard/) 提供文本,则它被正确复制。但是,如果它为 DOCX 文件提供服务,它不会直接复制到剪贴板。看一下rails控制器:

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

问题

您是否随时解决了将 BINARY 数据复制到剪贴板的问题?如何 ?

谢谢

4

1 回答 1

0

我阅读了剪贴板 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>

这是 Notepad++ 中的粘贴结果,Show All Characters菜单项打开: 我希望这会有所帮助;)在此处输入图像描述

于 2017-06-01T07:25:36.833 回答