In Zwischenablage kopieren mit Javascript in Firefox

Ich muss wirklich einen Weg, um text zu kopieren, um die OS-Zwischenablage in Firefox.

Weiß, es ist einfach im IE und nicht in Chrome und Opera, es sei denn, der flash verwendet wird. Aus verschiedenen Gründen bin ich nicht in der Lage zu verwenden die flash-Lösung!

Hatte es in der Vergangenheit, aber jetzt den netscape.Sicherheit.PrivilegeManager.enablePrivilege geschützt ist, so weit wie ich herausfinden kann (seit ver. 17).

Sieht es aus, als wenn es noch möglich ist nach diesem Artikel:

https://developer.mozilla.org/en-US/docs/Using_the_Clipboard

Glaube, es ist noch erforderlich ist, um die Möglichkeit in der user.js Datei wie diese

user_pref("capability.policy.policynames", "allowclipboard");
user_pref("capability.policy.allowclipboard.sites", "http://");
user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess"); 

Aber wie soll ich es tun? Haben einige test-ohne großen Erfolg und denke, es ist keine Anleitung im web, die erklären, wie soll es getan werden in einer generischen Art und Weise. E. g. eine einfache Anleitung, wie Sie javascript auf die Zwischenablage zugreifen. Hoffentlich ist auch eine Anleitung, die verwendet werden können durch den Benutzer leicht. Mache es und poste es hier, brauchen aber eine funktionierende Lösung.

Laut web gibt es 2 Lösungen für das kopieren in die Zwischenablage;

document.execCommand("copy", false, null) 

und

var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
  gClipboardHelper.copyString("Put me on the clipboard, please.");

Beide generieren einen Fehler mit meinem ersten Versuch.

Die Lösung unten müssen die Benutzer zum drücken von STRG+C und ich brauche eine Lösung, wo Sie den text kopieren, basierend auf der Presse einer Taste (viele auf einer einzigen Seite).

https://stackoverflow.com/questions/4344325/copy-to-clipboard-on-firefox-and-google-chrome/11346026#11346026

Meine alte Lösung war so:

var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);

if(clip)
{
  var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);

  if(trans)
  {
    var str = new Object();
    var len = new Object();
    var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

    if(str)
    {
      var clipid=Components.interfaces.nsIClipboard;

      if(clipid)
      {                 
        str.data = cliptext;

        trans.addDataFlavor('text/unicode');                    
        trans.setTransferData("text/unicode", str, cliptext.length*2);      

        clip.setData(trans, null, clipid.kGlobalClipboard); //No return value
        return 0;
      }
    }
  }
}

Komponenten.Klassen ist nicht definiert, in den nicht-privilegierten code (nicht add-on usw) also ich glaube nicht, dass jede andere Lösung mit dieser funktioniert nicht mehr. Eine Möglichkeit ist ein add-on ausgeführt werden soll, in einer privilegierten code-Bereich und senden Sie den text, der kopiert werden sollen, um dieses add-on für die Handhabung der Kopie der OS-Zwischenablage (nettes neues Projekt).

Diese nur verlassen, Dokument.execCommand("copy", false, null) in das Feld als ein stand-alone-Lösung.

Versuchte diesen code, und es muss nicht alles kopieren, um die OS-Zwischenablage - aber nicht, erzeugen keine Fehler btw.

var pre = document.getElementById('pcryptcopytext');

if(!pre)
{
  pre = document.createElement("pre");
  pre.setAttribute('id', 'pcryptcopytext');
  pre.setAttribute('style', 'opacity: 0; position: absolute; top: -10000px; right: 0;');
  document.body.appendChild(pre);
}

pre.innerHTML = cliptext;
pre.contentEditable = true;
//pre.unselectable = "off";
//pre.focus();

if (document.createRange) 
{
  var rng = document.createRange();
  rng.selectNodeContents(pre);
  document.execCommand("copy", false, null);
  document.body.removeChild(pre);
}

So, hat jemand eine funktionierende Lösung?

InformationsquelleAutor Beast | 2014-02-11

Schreibe einen Kommentar