GWT中复制到剪贴板 js+flash实现复制 兼容性比较好


Posted in Javascript onMarch 07, 2010

但是用flash就可以复制。例子就是VeryCd,看“复制选中的连接”按钮是一个flash。看来flash的安全沙箱没有限制将内容复制到剪贴板 

GWT中复制到剪贴板 js+flash实现复制 兼容性比较好 

 

但是也是有限制的: 

1 根据ZeroClipborad的人们说,这些flash必须通过网络加载。

 Zero Clipboard Does Not Work From Local Disk


This is a security restriction by Adobe Flash Player. Unfortunately, since we are utilizing the JavaScript-to-Flash interface ("ExternalInterface") this only works while truly online (if the page URL starts with "http://" or "https://"). It won't work running from a local file on disk.

However, there is a way for you to edit your local Flash Player security settings and allow this. Go to this website:

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html

And add the path to your local "ZeroClipboard.swf" file to the trusted files list, or try the "allow all" option.

 

2 flash虽然提供复制功能,但是前提是要通过用户的一次点击。意思就是不能在javascript中通过函数的方式setText就复制到剪贴板,而是调用了这个setText函数后,用户的鼠标在flash上有了一次点击,才可以。

This library is fully compatible with Flash Player 10, which requires that the clipboard copy operation be initiated by a user click event inside the Flash movie.  

这里和使用flash上传文件的swfupload有同样的问题。 

使用ZeroClipboard,可以将网页内容复制到剪贴板。但是ZeroClipboard没有GWT封装,我们项目是用GWT的,所以就学着swfupload的GWT封装,把ZeroClipboard也封装成GWT可以调用的形式。

1 先封装了一个zeroclipboard.jar 

2 项目中使用的是GXT控件库,为了和控件紧密结合,写了一个ZClipboardBinder类,将两者结合起来

3 使用方法见下(Zeroclipboard_test.java)

package zero.clipboard.test.client; 
import java.util.Date; 
import zero.clipboard.test.client.ZClipboardBinder.ClipboardListener; 
import com.extjs.gxt.ui.client.widget.LayoutContainer; 
import com.extjs.gxt.ui.client.widget.button.Button; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.ui.RootPanel; 
/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class Zeroclipboard_test implements EntryPoint { 
public void onModuleLoad() { 
LayoutContainer c = new LayoutContainer(); 
c.setSize(400, 300); 
Button btn = new Button("Copy Hello World"); 
// 将控件和ZeroClipboard绑定 
// ZClipboardBinder.bind(btn, "Hello World"); 
ZClipboardBinder.bind(btn, new ClipboardListener() { 
@Override 
public String prepareCopy() { 
return (new Date()).toString(); 
} 
}); 
c.add(btn); 
RootPanel.get().add(c); 
} 
}

相关下载都在附件中了。 

attachment.zip

示意结果

GWT中复制到剪贴板 js+flash实现复制 兼容性比较好 
点击按钮后——其实是点击了上面的flash,使用ctrl+v,就能看到结果。

GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
现在发现有很多有意义的功能都不能用javascript实现,例如多文件上传和复制到剪贴板,都是通过flash做中介,“曲线”实现的 ,不知道最后HTML5有没有解决这些问题,不用我们兜兜转转。
Zero Clipboard 开源的 JavaScript+flash 复制库类 

Javascript 相关文章推荐
jQuery 对象中的类数组操作
Apr 27 Javascript
javascript getElementsByClassName 和js取地址栏参数
Jan 02 Javascript
javascript实时显示当天日期的方法
May 20 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
javascript数据类型详解
Feb 07 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 Javascript
小程序实现多个选项卡切换
Jun 19 Javascript
javascript实现面向对象类的功能书写技巧
Mar 07 #Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 #Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 #Javascript
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 #Javascript
javascript下判断一个元素是否存在的代码
Mar 05 #Javascript
ExtJs扩展之GroupPropertyGrid代码
Mar 05 #Javascript
js 获取服务器控件值的代码
Mar 05 #Javascript
You might like
十天学会php之第二天
2006/10/09 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php数组一对一替换实现代码
2012/08/31 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python中extend和append的区别讲解
2019/01/24 Python
详解用python写一个抽奖程序
2019/05/10 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
年度考核自我鉴定
2014/02/02 职场文书
统计岗位职责
2014/02/21 职场文书
演讲稿格式
2014/04/30 职场文书
敬老模范事迹
2014/05/21 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
实习证明格式范文
2014/10/14 职场文书
布达拉宫的导游词
2015/02/02 职场文书
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript