兼容IE和Firefox的Js复制代码,在IE下很容易实现,就不多说了。
重点说下Firefox的实现原理:
1.请求更改安全级别,下面的内容主要是应用了textarea作为内容载体,如果是div等,直接网页标记就需要用到innerText,但firefox火狐浏览器并不支持innerText,所以又要考虑如何让firefox支持innerText,这样以来就可以完美的实现了。
<script type="text/javascript">
function copyCode(id){
var testCode=document.getElementById(id).value;
if(copy2Clipboard(testCode)!=false){
alert("生成的代码已经复制到粘贴板,你可以使用Ctrl+V 贴到需要的地方去了哦! ");
}
}
copy2Clipboard=function(txt){
if(window.clipboardData){
window.clipboardData.clearData();
window.clipboardData.setData("Text",txt);
}
else if(navigator.userAgent.indexOf("Opera")!=-1){
window.location=txt;
}
else if(window.netscape){
try{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
catch(e){
alert("您的firefox安全限制限制您进行剪贴板操作,请打开'about:config'将signed.applets.codebase_principal_support'设置为true'之后重试,相对路径为firefox根目录/greprefs/all.js");
return false;
}
var clip=Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if(!clip)return;
var trans=Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if(!trans)return;
trans.addDataFlavor('text/unicode');
var str=new Object();
var len=new Object();
var str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext=txt;str.data=copytext;
trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid=Components.interfaces.nsIClipboard;
if(!clip)return false;
clip.setData(trans,null,clipid.kGlobalClipboard);
}
}
</script>
<div>
<a href="#" target="_blank"> [<a href="#" onclick="copyCode('txtTestCode1');return false;">点击复制1</a>]
<textarea rows=2 id="txtTestCode1" style="width:500px;font-family: Verdana, Arial;font-size:12px;height:55px;border:1px solid #999999;">复制内容1</textarea>
</div>
<div>
<a href="#" target="_blank"> [<a href="#" onclick="copyCode('txtTestCode2');return false;">点击复制2</a>]
<textarea rows=2 id="txtTestCode2" style="width:500px;font-family: Verdana, Arial;font-size:12px;height:55px;border:1px solid #999999;">复制内容2</textarea>
</div>
<div>
<a href="#" target="_blank"> [<a href="#" onclick="copyCode('txtTestCode3');return false;">点击复制3</a>]
<textarea rows=2 id="txtTestCode3" style="width:500px;font-family: Verdana, Arial;font-size:12px;height:55px;border:1px solid #999999;">复制内容3</textarea>
</div>2.变相操作,采用了一个巧妙的方法,那就是利用flash作为跳板来完成此功能,具体代码如下:
<script type="text/javascript">// <![CDATA[
function CopyText(id) {
//copyToClipboard(document.getElementById(id).value);
copy(document.getElementById(id).value);
}
function copy(text2copy) {
if (window.clipboardData) {
window.clipboardData.setData("Text",text2copy);
} else {
var flashcopier = 'flashcopier';
if(!document.getElementById(flashcopier)) {
var divholder = document.createElement('div');
divholder.id = flashcopier;
document.body.appendChild(divholder);
}
document.getElementById(flashcopier).innerHTML = '';
var divinfo = '<span class="mceItemEmbed" src="_clipboard.swf" mce_src="_clipboard.swf" FlashVars="clipboard='+escape(text2copy)+'" width="0" height="0" type="application/x-shockwave-flash"></span>';//这里是关键
document.getElementById(flashcopier).innerHTML = divinfo;
alert('Text copied');
}
}
function copyToClipboard(meintext)
{
if (window.clipboardData)
{
alert("ie");
// the IE-manier
window.clipboardData.setData("Text", meintext);
// waarschijnlijk niet de beste manier om Moz/NS te detecteren;
// het is mij echter onbekend vanaf welke versie dit precies werkt:
}
else if (window.netscape)
{
// dit is belangrijk maar staat nergens duidelijk vermeld:
// you have to sign the code to enable this, or see notes below
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
// maak een interface naar het clipboard
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
alert("mozilla");
// maak een transferable
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
// specificeer wat voor soort data we op willen halen; text in dit geval
trans.addDataFlavor('text/unicode');
// om de data uit de transferable te halen hebben we 2 nieuwe objecten
// nodig om het in op te slaan
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext=meintext;
str.data=copytext;
trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid=Components.interfaces.nsIClipboard;
if (!clip) return false;
clip.setData(trans,null,clipid.kGlobalClipboard);
}
alert("Following info was copied to your clipboard:\n\n" + meintext);
return false;
}
// ]]></script>请保证该swf文件:_clipboard.swf 和你测试页面在同一个目录下!
原创文章如转载,请注明转载自若平博客
文章标题:兼容IE和Firefox的Js复制代码
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
小松
Post:2010-7-19 19:33:05
淘宝皇冠店铺大全
Post:2010-5-4 22:56:25
易棋牌
Post:2010-5-4 16:13:23
ikeeptrying
Post:2010-5-2 13:56:09
去痘
Post:2010-5-1 17:47:50
Firm
Post:2010-4-30 19:03:21
LG空调维修
Post:2010-4-30 9:35:14