复制到剪贴板功能的最新技术探究
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)将文本从restful服务复制到系统剪贴板:
$('.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 文件,它就无法正确地复制到剪贴板。请查看 Rails 控制器:
def copy_to_clipboard
send_file @resource.resource_content.content.file.file, :type => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
end
问题
你曾经解决过将二进制数据复制到剪贴板的问题吗?如果有,你是如何解决的?
谢谢