这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
今天作一个功能,有一个 input,里边有内容,点一下按钮就复制里边的内容到剪贴板
但 IE6 两行 JS 代码就可以,IE7 以上也差不多,只不过出来一个安全提示比较恶心,用户如果看到了,一定有怀疑;
再但就是 Firefox、Chrome 等根本就不让你复制;
记得以前网上有这方面的代码,找了一下,发现全部不能在 firefox3.5 以上的版本中应该,最后终于找到了一个,代码还相当相当的复杂,不太敢用。
最后,憋的实在没有办法了,查了查资料,自已写了一个:
主要的理解的几个点:
1、Firefox 这些浏览器,出于安全考虑吧,直接是不让复制的;
2、在 Flash 中,可以用 System.setClipboard(),把内容扔到剪贴板上,然后再让 FLASH 工作在 Firefox 下;
3、在 Flash 播放器 10.0 之后呢,也是出于安全考虑吧,System.setClipboard 的内容必须在 FLASH 里边;
4、用 ExternalInterface 可以和 JS 通信;
5、ExternalInterface 在 flash8 中必须引用一下才可以;
默认的 html 代码:
- <input type="text" id="testInput" name="testInput" value="4234324234"
- />
- <div id="buttonBox">
- <button onclick="copy('testInput')">
- copy
- </button>
- </div>
所以,设计的时候,先作第一个判断,如果是 IE,就还用默认的代码,这样最没有问题,如果不是,就用一个 FLASH 把默认的按钮覆盖;
- if (window.XMLHttpRequest){//如果不是IE时,就用FLASH的方式复制
- $('buttonBox').innerHTML = '<embed src="flashCopy.swf" width="48"
- height="23" quality="high"
- pluginspage="http://www.macromedia.com/go/getflashplayer"
- type="application/x-shockwave-flash"></embed>';
- }
以下是所有的 JS 文件:
- <script>
- function $(id){
- return document.getElementById(id);
- }
- function copy(){//ie6
- var value = $('testInput').value;
- window.clipboardData.clearData();
- window.clipboardData.setData("Text", value);
- alert('复制成功!');
- }
- function flashCopy(){//firefox .......
- return $('testInput').value;
- }
- function flashCopyBack(){
- alert('复制成功!');
- }
- if("v" != "v"){//如果不是IE时,就用FLASH的方式复制
- $('buttonBox').innerHTML = '<embed src="111.swf" width="48" height="23" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>';
- }
- </script>
FLASH 按钮的代码如下:
- on (release) {
- import flash.external.ExternalInterface;
- var inputText = ExternalInterface.call('flashCopy');
- System.setClipboard(inputText);
- ExternalInterface.call('flashCopyBack');
- //_root.boboText.text = inputText;
- }
原理,就是避开那个安全上的限制,在点 FLASH 中的按钮时,通过 FLASH 中的代码去调页面中的 JS 代码,JS 代码可以拿到 INPUT 中的值,然后再传给 FLASH,这时,FLASH 中就有了这些值了,然后,FLASH 自已再通过 System.setClipboard 把这些值存到剪贴板上; 再然后,他再去调用页面中的 flashCopyBack,flashCopyBack 只干一件事,就是提示已复制成功!
我在 Firefox、chrome、ie 中都测过了,没有问题,如果谁发现有问题,请告诉我,谢谢,因为我现在已经开始用!
来源: http://www.phperz.com/article/17/0630/284692.html