js复制到剪贴板(兼容ie和火狐)

亮术网 2013-03-22 本网整理

  在web开发过程中常常要实现复制功能,比如复制源码、复制推广链接等,为了提高程序效率,一般都用js实现,具体源码如下:

<script language="javascript" type="text/javascript"> 
function CopyValue(obj){
    var val = document.getElementById(obj).value;
    if(CopyValue2Clipboard(val)!=false){
        alert('已经复制!');
    }
}
CopyValue2Clipboard = function(val){
    if(window.clipboardData){
        window.clipboardData.clearData();
        window.clipboardData.setData("Text",val);
    }
    else if(navigator.userAgent.indexOf("Opera")! = -1){
        window.location = val;
    }
    else if(window.netscape){
        try{
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        }
        catch(e){
            alert("此操作被浏览器拒绝!请在浏览器地址栏输入“about:config”并回车,然后双击将[signed.applets.codebase_principal_support]的值设置为'true'即可。");
            return false;
        }
        var cb = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if(!cb)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 copyValue = val;
        str.data = copyValue;
        trans.setTransferData("text/unicode",str,copyValue.length*2);
        var cbId = Components.interfaces.nsIClipboard;
        if(!cb)return false;
        cb.setData(trans,null,cbId.kGlobalClipboard);
    }
}
</Script>

 
   这句 var val = document.getElementById(obj).value; 是取待复制对象的值,也可以是 var val = document.getElementById(obj).innerText; ,不过ie6不支持,所以为了照顾ie6,只能用input标签,暂不用span、div等标签。