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 相关文章推荐
情人节之礼 js项链效果
Feb 13 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
js转html实体的方法
Sep 27 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
如何提高数据访问速度
Dec 26 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
Mar 13 Javascript
vue.js实现插入数值与表达式的方法分析
Jul 06 Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 Javascript
design vue 表格开启列排序的操作
Oct 28 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
原生js实现日历效果
2020/03/02 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python Socket编程详细介绍
2017/03/23 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python单元测试简单示例
2018/07/03 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
非常详细的C#面试题集
2016/07/13 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
中秋节寄语2015
2015/03/24 职场文书
质检员工作总结2015
2015/04/25 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
解决golang 关于全局变量的坑
2021/05/06 Golang
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android