Ab 2016 bearbeiten
Ab 2016 können Sie jetzt in den meisten Browsern Text in die Zwischenablage kopieren, da die meisten Browser die Möglichkeit haben, eine Textauswahl programmgesteuert in die Zwischenablage zu kopieren, wobei eine Auswahl document.execCommand("copy")
funktioniert.
Wie bei einigen anderen Aktionen in einem Browser (z. B. beim Öffnen eines neuen Fensters) kann das Kopieren in die Zwischenablage nur über eine bestimmte Benutzeraktion (z. B. einen Mausklick) erfolgen. Dies kann beispielsweise nicht über einen Timer erfolgen.
Hier ist ein Codebeispiel:
document.getElementById("copyButton").addEventListener("click", function() {
copyToClipboard(document.getElementById("copyTarget"));
});
function copyToClipboard(elem) {
// create hidden text element, if it doesn't already exist
var targetId = "_hiddenCopyText_";
var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
var origSelectionStart, origSelectionEnd;
if (isInput) {
// can just use the original source element for the selection and copy
target = elem;
origSelectionStart = elem.selectionStart;
origSelectionEnd = elem.selectionEnd;
} else {
// must use a temporary form element for the selection and copy
target = document.getElementById(targetId);
if (!target) {
var target = document.createElement("textarea");
target.style.position = "absolute";
target.style.left = "-9999px";
target.style.top = "0";
target.id = targetId;
document.body.appendChild(target);
}
target.textContent = elem.textContent;
}
// select the content
var currentFocus = document.activeElement;
target.focus();
target.setSelectionRange(0, target.value.length);
// copy the selection
var succeed;
try {
succeed = document.execCommand("copy");
} catch(e) {
succeed = false;
}
// restore original focus
if (currentFocus && typeof currentFocus.focus === "function") {
currentFocus.focus();
}
if (isInput) {
// restore prior selection
elem.setSelectionRange(origSelectionStart, origSelectionEnd);
} else {
// clear temporary content
target.textContent = "";
}
return succeed;
}
input {
width: 400px;
}
<input type="text" id="copyTarget" value="Text to Copy"> <button id="copyButton">Copy</button><br><br>
<input type="text" placeholder="Click here and press Ctrl-V to see clipboard contents">
Hier ist eine etwas fortgeschrittenere Demo: https://jsfiddle.net/jfriend00/v9g1x0o6/
Und Sie können auch eine vorgefertigte Bibliothek erhalten , die dies mit für Sie tut clipboard.js .
Alter, historischer Teil der Antwort
Das direkte Kopieren in die Zwischenablage über JavaScript ist aus Sicherheitsgründen von keinem modernen Browser gestattet. Die häufigste Problemumgehung besteht darin, eine Flash-Funktion zum Kopieren in die Zwischenablage zu verwenden, die nur durch einen direkten Benutzerklick ausgelöst werden kann.
Wie bereits erwähnt, ist ZeroClipboard ein beliebter Codesatz zum Verwalten des Flash-Objekts zum Kopieren. Ich habe es benutzt. Wenn Flash auf dem Browsing-Gerät installiert ist (was Mobilgeräte oder Tablets ausschließt), funktioniert es.
Die nächsthäufigste Problemumgehung besteht darin, den an die Zwischenablage gebundenen Text einfach in ein Eingabefeld zu platzieren, den Fokus auf dieses Feld zu verschieben und den Benutzer anzuweisen, Ctrl+ Czu drücken, um den Text zu kopieren.
Weitere Diskussionen zu diesem Problem und möglichen Problemumgehungen finden Sie in diesen früheren Stack Overflow-Beiträgen:
Diese Fragen, die nach einer modernen Alternative zur Verwendung von Flash fragen, haben viele Fragen und keine Antworten mit einer Lösung erhalten (wahrscheinlich, weil es keine gibt):
Internet Explorer und Firefox verfügten früher über nicht standardmäßige APIs für den Zugriff auf die Zwischenablage, aber ihre moderneren Versionen haben diese Methoden (wahrscheinlich aus Sicherheitsgründen) abgelehnt.
Es gibt eine aufkommende Standardanstrengung, um zu versuchen, einen "sicheren" Weg zu finden, um die häufigsten Probleme in der Zwischenablage zu lösen (wahrscheinlich ist eine bestimmte Benutzeraktion erforderlich, wie es die Flash-Lösung erfordert), und es sieht so aus, als ob sie teilweise in der neuesten Version implementiert werden könnte Versionen von Firefox und Chrome, aber das habe ich noch nicht bestätigt.