当前位置: 代码迷 >> Web前端 >> 点击旋钮复制文本框内容
  详细解决方案

点击旋钮复制文本框内容

热度:109   发布时间:2012-11-10 10:48:51.0
点击按钮复制文本框内容

点击按钮复制文本框内容预览地址:http://www.365css.cn/example/copyinput/

但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代码:

  1. <input?type="text"?id="testInput"?name="testInput"?value="4234324234"?/>??
  2. <div?id="buttonBox">??
  3. ????<button?onclick="copy('testInput')">copy</button>??
  4. </div>?

所以,设计的时候,先作第一个判断,如果是IE,就还用默认的代码,这样最没有问题,如果不是,就用一个FLASH把默认的按钮覆盖;

  1. if?(window.XMLHttpRequest) {//如果不是IE时,就用FLASH的方式复制??
  2. ????$('buttonBox').innerHTML?=?'<embed?src="flashCopy.swf"?width="48"???
  3. height="23"?quality="high"????
  4. pluginspage="http://www.macromedia.com/go/getflashplayer"???
  5. type="application/x-shockwave-flash"></embed>';??
  6. }?

以下是所有的JS文件:

?

  1. <script>??
  2. function?$(id){??
  3. ????return?document.getElementById(id);??
  4. }??
  5. ??
  6. function?copy(){//ie6??
  7. ????var?value?=?$('testInput').value;????
  8. ????window.clipboardData.clearData();?????
  9. ????window.clipboardData.setData("Text",?value);???
  10. ????alert('复制成功!');???
  11. }??
  12. ??
  13. function?flashCopy(){//firefox?.......??
  14. ????return?$('testInput').value;????
  15. }??
  16. ??
  17. function?flashCopyBack(){??
  18. ????alert(' 复制成功!');??
  19. }??
  20. ??
  21. if("v"?!=?"v"){//如果不是IE时,就用FLASH的方式复制??
  22. ????$('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>';??
  23. }??
  24. </script>?


FLASH按钮的代码如下:

  1. on?(release)?{??
  2. ????import?flash.external.ExternalInterface;??
  3. ????var?inputText?=?ExternalInterface.call('flashCopy');??
  4. ????System.setClipboard(inputText);??
  5. ????ExternalInterface.call('flashCopyBack');??
  6. ????//_root.boboText.text?=?inputText;??
  7. }?

原理,就是避开那个安全上的限制,在点FLASH中的按钮时,通过FLASH中的代码去调页面中的JS代码,JS代码可以拿到INPUT中的值,然后再传 给FLASH,这时,FLASH中就有了这些值了,然后,FLASH自已再通过System.setClipboard把这些值存到剪贴板上; 再然后,他再去调用页面中的flashCopyBack,flashCopyBack只干一件事,就是提示已复制成功!

我在Firefox、chrome、ie中都测过了,没有问题,如果谁发现有问题,请告诉我,谢谢,因为我现在已经开始用!

  相关解决方案