按钮实现复制文本框input内容效果js特效代码
主要的理解的几个点:
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 = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="48" height="23" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="flashCopy.swf" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="48" height="23" src="flashCopy.swf" quality="high"></embed></object>';
}
以下是所有的JS文件:
程序代码
<script type="text/javascript">// <![CDATA[
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 = '<span src="111.swf" width="48" height="23" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></span>';
}
// ]]></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只干一件事,就是提示已复制成功!