日期:2014-05-16  浏览次数:20362 次

js实现兼容IE和FF的复制功能
function fn_copy(meinId) {
 var meintext = document.getElementById(meinId).innerHTML;
 if (window.clipboardData) {
  // 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) {
  try {
   netscape.security.PrivilegeManager
     .enablePrivilege("UniversalXPConnect");
  } catch (e) {
   alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");
  }
  // 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;
  // 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("已复制到剪贴版");
 return false;
}

?

?

页面:

<span id="text">copy test</span> [<span id="copy"><a href="#" onclick="fn_copy('text');">复制链接</a></span>]