2016 년 현재 수정
2016 년 현재 대부분의 브라우저에서 선택적으로 document.execCommand("copy")
작동 하는 텍스트를 사용하여 텍스트를 클립 보드에 프로그래밍 방식으로 복사 할 수 있으므로 대부분의 브라우저에서 텍스트를 클립 보드에 복사 할 수 있습니다 .
새 창 열기와 같은 브라우저의 다른 작업과 마찬가지로 클립 보드로 복사는 마우스 클릭과 같은 특정 사용자 작업을 통해서만 수행 할 수 있습니다. 예를 들어 타이머를 통해 수행 할 수 없습니다.
코드 예제는 다음과 같습니다.
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">
좀 더 고급 데모가 있습니다 : https://jsfiddle.net/jfriend00/v9g1x0o6/
그리고 당신은 또한 당신을 위해 이것을 제공하는 내장 라이브러리를 얻을 수 있습니다 clipboard.js .
답의 오래되고 역사적인 부분
최신 브라우저에서는 보안상의 이유로 JavaScript를 통해 클립 보드로 직접 복사 할 수 없습니다. 가장 일반적인 해결 방법은 Flash 기능을 사용하여 직접 사용자 클릭으로 만 트리거 할 수있는 클립 보드로 복사하는 것입니다.
이미 언급했듯이 ZeroClipboard 는 Flash 객체를 관리하여 복사를 수행하는 데 널리 사용되는 코드 세트입니다. 나는 그것을 사용했다. 브라우징 장치 (모바일 또는 태블릿 제외)에 Flash가 설치되어 있으면 작동합니다.
다음으로 가장 일반적인 해결 방법은 클립 보드에 바인딩 된 텍스트를 입력 필드에 놓고 포커스를 해당 필드로 이동 한 다음 Ctrl+ C를 눌러 텍스트를 복사하도록 안내하는 것입니다.
이 문제에 대한 다른 토론과 가능한 해결 방법은 다음의 이전 스택 오버플로 게시물에서 확인할 수 있습니다.
Flash 사용에 대한 현대적인 대안을 요구하는 다음과 같은 질문은 많은 질문 공증을 받았으며 해결책에 대한 답변이 없었습니다 (아마도 존재하지 않기 때문에).
Internet Explorer와 Firefox는 클립 보드에 액세스하기 위해 비표준 API를 사용했지만, 최신 버전에서는 이러한 방법이 더 이상 사용되지 않습니다 (보안상의 이유로).
가장 일반적인 클립 보드 문제 (플래시 솔루션과 같은 특정 사용자 작업이 필요할 수 있음)를 해결하기위한 "안전한"방법을 찾으려고 하는 초기 표준 노력 이 있으며, 최신 버전에서 부분적으로 구현 된 것 같습니다. Firefox와 Chrome의 버전이지만 아직 확인하지 못했습니다.