昨天,同学问我关于剪贴板复制的问题。在IE里运行的很好的代码,到了Firefox里总弹一个讨厌的权限提示框。网上Google了一把,已经有很经典的解决方案——Clipboard Copy。原理是:用隐藏的clipboard.swf作为桥梁,复制内容到剪贴板。但是,flash 升级到10以后,一切又回归原点。flash10中规定了只有在swf上进行了真实的操作(比如鼠标点击)才能访问剪切板,而使用隐藏的swf文件,通过 javascript操作flash的剪贴板,并没有对swf文件进行真实的操作。
       当然道高一尺魔高一丈,Zero Clipboard横空出世,利用这个js库可以支持利用flash 10 实现复制到剪贴板。原理其实也简单,既然你要真实的操作,无外乎就是要我点你吗?点就是了,Flash 当然还是需要的,只是在上面多放了一层东东,比如置个buttondivp_w_picpath什么的,当点击这上面这层时,实际点击的还是是flash。这不是传说中的隔空打牛吗?
DEMO页面 :  http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/
Zero Clipboard项目主页: http://code.google.com/p/zeroclipboard/
 
       恰好最近在研究Flex4,于是尝试用Flex来解决。
思路如下:Flex JS
定义一个Flex按钮
单击调用一个JavaScript(第一次FlexJS通信)
JS读取要复制的内容回传Flex(第二次FlexJS通信)
Flex将得到的内容写入剪贴板
 
具体代码实现参看附件
注意因为Flash 10 严格的安全限制,如果不是在Flex项目下的bin-debug目录执行,会报安全沙箱冲突类似的错误,需要多做两步配置,设置完毕后,记得重启浏览器。
C:\WINDOWS\system32\Macromed\Flash\mms.cfg
C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\xxx.cfg  加入执行目录路径。