2016-03-22 8 views
7

Ich versuche eine Kopierfunktion in reinem JS zu erstellen, also kein Flash. Das Problem, das ich habe, ist, dass ich die Kopierschaltfläche nicht anzeigen möchte, wenn der Browser das Kopieren in die Zwischenablage nicht unterstützt.Wie kopiere ich in die Zwischenablage, bevor ich sie benutze

Ich verwende die document.execCommand('copy') Methode, um das Kopieren in die Zwischenablage zu kopieren, aber die Unterstützung dafür ist nicht die beste. Zum Beispiel hat Safari die Funktion execCommand, unterstützt aber nicht den Kopierparameter. Das bedeutet, dass ich nicht einfach überprüfen kann, ob die Funktion existiert.

Aufgrund dieser zweifelhaften Unterstützung denke ich, dass ich in die Richtung der Browser-Erkennung gehen muss, genau wie github, was ich bei der Betrachtung eines zeroclipboard Problems entdeckt habe. Here ist die Implementierung, die ich gefunden habe.

Gibt es eine korrekte Möglichkeit, den User Agent zu erkennen? Ich würde lieber nicht NavigatorID.userAgent verwenden, da dies gemäß MDN veraltet ist.

+0

haben Sie versucht 'typeof document.execCommand! == 'undefined''? – Zamboney

+1

Wie ich in der Frage gesagt habe, hat Safari die Funktion document.execCommand, unterstützt aber nicht den Parameter 'copy'. Deshalb denke ich daran, den Weg der Browser-Erkennung zu gehen. Es wird auch kein Fehler ausgegeben, wenn versucht wird, die Funktion mit diesem Parameter zu verwenden. – silverlight513

Antwort

4

Ich bemerkte, dass in Safari vor Version 10 (getestet auf 9.0 und 9.1) die folgende Konstruktion

document.execCommand('copy'); 

false zurück. Diese Tatsache kann zur Überprüfung der Kompatibilität in Safari verwendet werden.

if (false == document.execCommand('copy')) { 
    // Logic for handling the copy functionality in some other way 
} 
+0

Firefox (v48) gibt false und eine Warnung, wenn ich es gerade in der Konsole ausprobiert. Laut MDN hat Firefox den Befehl seit v41 unterstützt - https://developer.mozilla.org/en/docs/Web/API/Document/execCommand – silverlight513

+0

Ja, habe das gleiche Problem. Die interessante Tatsache, dass FF v47 und FF v49 "wahr" zurückgibt. Sieht wie ein Fehler in V48 aus. –