复制粘贴的实现

使用clipboard.js复制页面内容到剪切板

  最近在做一个的智能客服Web端浏览器应用,其中有一项需求是客户在获取系统返回的

答案后点击“复制答案”按钮将答案复制到系统剪切板。本以为这是一个小case,但是发现如果

要对各种主流浏览器都有良好的兼容性并不简单。原因在于出于安全原因,大多数现代浏览

器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用)。

 

  上网搜索了一下,现有的方案大致有两种:

  一:使用原生javascript中window.clipboardData实现复制到剪贴板功能;

  二:使用Zero Clipboard库;

 

  在尝试了之后发现现有的方案都不能满足需求。

方案一仅仅支持ie浏览器,在firefox,chrome浏览器上则不起作用。

方案二则是现有绝大多数网站(包括github等)所采取的方案,ZeroClipboard是国外大神开发的一个

用于剪贴板复制的 JS 插件,它是基于 Flash 来实现跨浏览器的复制功能的。当我们使用 ZeroClipboard

的时候,它会悄悄隐藏一个小小的 Flash 影片(swf),不会对我们的用户界面造成影响。我们只需要借助

它实现复制功能就行了。

  ZeroClipboard 中的 “Zero” 指的就是”不可见,零干扰”。

  对此感兴趣的可以参考 http://my.oschina.net/shniu/blog/298406?p=1

 

  但是在现代浏览器中,flash逐渐没落,firefox浏览器默认不开启flash,所以Zero Clipboard在

兼容方面也表现不佳。

 

  那么,对于复制到剪切板这种简单的操作有没有一种实现简单,兼容性良好的解决方案呢?有的!那就是github

上的开源项目clipboard.js(官网:http://zenorocha.github.io/clipboard.js/) 官网对于clipboard.js的介绍

非常简单:

  A modern approach to copy text to clipboard No Flash. No dependencies. Just 3kb gzipped

  Copying text to the clipboard shouldn’t be hard. It shouldn’t require dozens of steps to configure

or hundreds of KBs to load. But most of all, it shouldn’t depend on Flash or any bloated framework.

That’s why clipboard.js exists.(拷贝文本到剪切板不应该复杂,它不应该需要许多步骤以及几百KB的文件,另

外,它不应该依靠flash以及其他框架,这就是clipboard存在的原因)

 

  使用clipboard简单快捷,并且从官网下载下来的zip格式压缩包里有非常实用的demo,举一个简单的例子:

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>target-div</title>
 6 </head>
 7 <body>
 8     <!-- 1. Define some markup -->
 9     <div>hello</div>
10     <button class="btn" data-clipboard-action="copy" data-clipboard-target="div">Copy</button>
11 
12     <!-- 2. Include library -->
13     <script src="../dist/clipboard.min.js"></script>
14 
15     <!-- 3. Instantiate clipboard -->
16     <script>
17     var clipboard = new Clipboard('.btn');
18 
19     clipboard.on('success', function(e) {
20         console.log(e);
21     });
22 
23     clipboard.on('error', function(e) {
24         console.log(e);
25     });
26     </script>
27 </body>
28 </html>

 

非常简单吧,我们只需下面四步:

1.引入clipboard.min.js文件

2.选择一个可以确定被拷贝元素的选择器,本例中使用用的是基本的标签选择器<div>,当然也可以使用id选择器 class选择器等等

3.定义一个button按钮,注意按钮的属性:

  data-clipboard-action=”copy” data-clipboard-target=”div”
  其中data-clipboard-target属性就是第二步你定义的选择器

4.书写js,建立clipboard对象以及复制后执行的方法

 

OK,这样功能就完成了,点击按钮后就会发现div的内容已经拷贝到剪切板了。

### 如何在 VMware 中配置和使用复制粘贴功能 #### 配置 VMware 的复制粘贴功能 为了使 VMware 虚拟机能够正常实现复制粘贴功能,通常需要安装正确配置 VMware Tools 或其开源替代品 open-vm-tools。以下是具体的操作说明: #### 方法一:安装 VMware Tools VMware Tools 是由 VMware 提供的一套工具集,旨在提升虚拟机与宿主机之间的交互体验。通过安装 VMware Tools 可以启用剪贴板共享等功能。 1. **挂载 VMware Tools ISO 文件** 在 VMware 界面中选择 `虚拟机` -> `安装 VMware Tools`,这会自动将 VMware Tools 的镜像文件挂载到虚拟机的光驱中[^1]。 2. **运行安装程序** 进入虚拟机中的光驱路径(通常是 `/mnt/cdrom`),解压运行安装脚本: ```bash cd /mnt/cdrom tar xzvf VMwareTools*.tar.gz -C /tmp/ cd /tmp/vmware-tools-distrib/ ./vmware-install.pl -d ``` 3. **重启虚拟机** 安装完成后,需重启虚拟机以应用更改。 ```bash reboot ``` 4. **启用双向剪贴板同步** 打开 VMware 设置界面,在 `选项` -> `高级` -> `虚拟机设置` 下找到 `隔离设备`,勾选 `启用拖放` 和 `启用虚拟机与主机间的复制粘贴` 功能[^2]。 --- #### 方法二:安装 Open-VM-Tools 如果希望使用开源解决方案,则可以选择安装 open-vm-tools,它是 VMware Tools 的社区版本。 1. **卸载旧版 open-vm-tools** 如果之前已安装过其他版本的 open-vm-tools,先将其移除: ```bash sudo apt-get autoremove --purge open-vm-tools* ``` 2. **安装最新版 open-vm-tools** 使用包管理器安装最新的 open-vm-tools 和桌面扩展组件: ```bash sudo apt-get update sudo apt-get install open-vm-tools open-vm-tools-desktop ``` 3. **重启虚拟机** 同样需要重启虚拟机以激活新安装的服务: ```bash reboot ``` --- #### 方法三:调整网络模式 某些情况下,网络模式会影响复制粘贴功能的表现。推荐尝试切换至桥接模式或其他稳定的网络连接方式[^4]。 1. **修改网络适配器设置** 在 VMware 主界面上右键点击目标虚拟机,进入 `设置` -> `网络适配器`,将网络类型改为 `桥接模式`。 2. **测试效果** 切换后重新登录虚拟机,验证是否解决了复制粘贴问题。 --- #### 常见问题排查 即使完成上述操作仍可能出现异常情况,可按照以下步骤逐一排除原因: 1. **确认权限** 确保当前用户具有管理员权限,能访问系统级资源。 2. **更新驱动程序** 对于 Windows 平台上的虚拟机,有时需要额外安装增强型键盘驱动程序以及相关补丁文件[^2]。 3. **检查日志记录** 查看 `/var/log/vmware-installer.log` 或者类似的调试信息来定位潜在错误源。 4. **禁用安全软件干扰** 某些杀毒产品可能会阻止跨平台数据交换行为;临时关闭防火墙或者防病毒引擎再试一次。 --- #### 总结 综上所述,无论是借助官方提供的 VMware Tools 抑或是采用开放标准协议栈下的 open-vm-tools 实现方案都能有效达成预期目的——即顺利开启两方间无缝衔接式的文字传递能力。只要遵循既定流程逐步实施即可轻松搞定这一难题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值