2016 itibarıyla düzenleme
2016'dan itibaren, çoğu tarayıcıda metni panoya kopyalayabilirsiniz, çünkü çoğu tarayıcı bir seçim dışında çalışarak bir metin seçimini panoya programlı olarak kopyalama yeteneğine sahiptir document.execCommand("copy")
.
Bir tarayıcıdaki diğer bazı işlemlerde olduğu gibi (yeni bir pencere açmak gibi) panoya kopyalama yalnızca belirli bir kullanıcı eylemiyle (fare tıklaması gibi) yapılabilir. Örneğin, bir zamanlayıcı ile yapılamaz.
İşte bir kod örneği:
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">
İşte biraz daha gelişmiş demo: https://jsfiddle.net/jfriend00/v9g1x0o6/
Ayrıca, clipboard.js ile bunu sizin için yapan önceden oluşturulmuş bir kitaplık da alabilirsiniz .
Cevabın eski, tarihsel kısmı
Güvenlik nedeniyle herhangi bir modern tarayıcı tarafından JavaScript'e doğrudan panoya kopyalanmasına izin verilmez. En yaygın çözüm, panoya kopyalamak için yalnızca doğrudan kullanıcı tıklamasıyla tetiklenebilen bir Flash özelliği kullanmaktır.
Daha önce de belirtildiği gibi, ZeroClipboard , kopyayı yapmak için Flash nesnesini yönetmek için popüler bir kod kümesidir. Ben kullandım. Tarama aygıtına (mobil veya tableti hariç tutan) Flash yüklüyse çalışır.
Bir sonraki en yaygın çözüm, panoya bağlı metni bir giriş alanına yerleştirmek, odağı bu alana taşımak ve kullanıcıya metni kopyalamak için Ctrl+ tuşuna basmasını tavsiye etmektir C.
Konuyla ilgili diğer tartışmalar ve olası çözüm yolları, bu önceki Stack Overflow yayınlarında bulunabilir:
Flash'ı kullanmak için modern bir alternatif isteyen bu sorular, birçok soru upvotes aldı ve bir çözümle cevap vermedi (muhtemelen hiçbiri mevcut olmadığı için):
Internet Explorer ve Firefox, panoya erişmek için standart olmayan API'lara sahipti, ancak daha modern sürümleri bu yöntemleri kullanımdan kaldırmıştır (muhtemelen güvenlik nedeniyle).
En yaygın pano sorunlarını çözmek için "güvenli" bir yol bulmaya çalışmak için yeni bir standart çabası vardır (muhtemelen Flash çözümü gerektirdiği gibi belirli bir kullanıcı eylemi gerektirir) ve en son olarak kısmen uygulanabilir gibi görünüyor Firefox ve Chrome sürümleri, ancak henüz onaylamadım.