在浏览器中复制到剪贴板 BINARY 数据
Posted
技术标签:
【中文标题】在浏览器中复制到剪贴板 BINARY 数据【英文标题】:Copy to clipboard BINARY data in browsers 【发布时间】:2012-11-30 15:55:27 【问题描述】:复制到剪贴板功能的最新技术(我的调查)
Flash 替代品
我找到了以下替代方案: 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) 调用,它只支持纯文本字符串,正如我们在 Adobe 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 数据复制到剪贴板的问题?以及如何?
谢谢
【问题讨论】:
请注意:剪贴板 JS API 现在 supported 在***浏览器中相当不错。但我不知道这对二进制数据复制有帮助。 @prototype 不确定要求是什么? 也许您可能会考虑here 中描述的允许将文件从服务器拖放到桌面的技术?据说它只能在 chrome 中工作。 我的目标是放置一个带有数据风格“GVML”的 ZIP blob,最终目标是将图表从浏览器复制/粘贴到 Office 作为可编辑对象。 不让网页复制二进制数据是一个可能的安全问题,因为用户不知道内容吗? 【参考方案1】:我阅读了Clipboard API and events 并编写了以下代码,这对我有用。唯一的问题是使用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
菜单项:
我希望这会有所帮助;)
【讨论】:
以上是关于在浏览器中复制到剪贴板 BINARY 数据的主要内容,如果未能解决你的问题,请参考以下文章