Como copiar o texto dentro de uma div para a área de transferência? Eu tenho uma div e preciso adicionar um link que adicione o texto à área de transferência. Existe uma solução para isso?
<p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>
<a class="copy-text">copy Text</a>
Depois de clicar em copiar texto, pressionar Ctrl+ V, ele deve ser colado.
Respostas:
Editar a partir de 2016
A partir de 2016, agora você pode copiar texto para a área de transferência na maioria dos navegadores, porque a maioria dos navegadores tem a capacidade de copiar programaticamente uma seleção de texto para a área de transferência usando
document.execCommand("copy")
isso funciona como uma seleção.Como em outras ações de um navegador (como abrir uma nova janela), a cópia na área de transferência só pode ser feita por meio de uma ação específica do usuário (como um clique do mouse). Por exemplo, isso não pode ser feito através de um temporizador.
Aqui está um exemplo de código:
Aqui está uma demonstração um pouco mais avançada: https://jsfiddle.net/jfriend00/v9g1x0o6/
Além disso, você também pode obter uma biblioteca pré-criada que faz isso com o clipboard.js .
Parte antiga e histórica da resposta
A cópia direta na área de transferência via JavaScript não é permitida por nenhum navegador moderno por razões de segurança. A solução mais comum é usar um recurso Flash para copiar para a área de transferência que só pode ser acionada por um clique direto do usuário.
Como já mencionado, o ZeroClipboard é um conjunto popular de códigos para gerenciar o objeto Flash para fazer a cópia. Eu já usei. Se o Flash estiver instalado no dispositivo de navegação (que exclui o celular ou o tablet), ele funciona.
A próxima solução mais comum é colocar o texto vinculado à área de transferência em um campo de entrada, mover o foco para esse campo e aconselhar o usuário a pressionar Ctrl+ Cpara copiar o texto.
Outras discussões sobre o problema e possíveis soluções alternativas podem ser encontradas nessas postagens anteriores do Stack Overflow:
Como copio para a área de transferência em JavaScript?
Como copiar texto para a área de transferência do cliente usando o jQuery?
Como você pode copiar para a área de transferência sem o Flash?
Essas perguntas que pedem uma alternativa moderna ao uso do Flash receberam muitas perguntas positivas e nenhuma resposta com uma solução (provavelmente porque não existe):
Alternativa HTML5 ao ZeroClipboard baseado em flash para cópia segura de dados para a área de transferência?
Copiar para a área de transferência sem Flash
O Internet Explorer e o Firefox costumavam ter APIs não padrão para acessar a área de transferência, mas suas versões mais modernas preteriram esses métodos (provavelmente por razões de segurança).
Há um esforço incipiente de padrões para tentar encontrar uma maneira "segura" de resolver os problemas mais comuns da área de transferência (provavelmente exigindo uma ação específica do usuário, como a solução Flash exige), e parece que ela pode ser parcialmente implementada nos últimos anos. versões do Firefox e Chrome, mas ainda não o confirmei.
fonte
document.execCommand("copy")
em circunstâncias suficientes confiar em usá-lo para isso. Por isso, estou tentando manter minha resposta atualizada (que foi originalmente criada há quase 2 anos). Ainda não temos uma solução confiável para o Safari, além de pré-selecionar o texto e dizer ao usuário para pressionar manualmente Ctrl + C, mas pelo menos há progresso em outro lugar.document.execCommand("copy")
de modo que este código agora deve funcionar no Safari 10.Existe outra maneira não-Flash (além da API da área de transferência mencionada na resposta de jfriend00 ). Você precisa selecionar o texto e, em seguida, executar o comando
copy
para copiar para a área de transferência, independentemente do texto selecionado atualmente na página.Por exemplo, esta função copiará o conteúdo do elemento passado para a área de transferência (atualizada com a sugestão dos comentários do PointZeroTwo ):
É assim que funciona:
document.execCommand("copy")
.Você pode ver uma demonstração rápida aqui:
O principal problema é que nem todos os navegadores suportam esse recurso no momento, mas você pode usá-lo nos principais:
Atualização 1: Isso também pode ser alcançado com uma solução JavaScript pura (sem jQuery):
Observe que passamos o ID sem o # agora.
Como madzohan relatou nos comentários abaixo, há alguns problemas com a versão de 64 bits do Google Chrome em alguns casos (executando o arquivo localmente). Esse problema parece ter sido corrigido com a solução não-jQuery acima.
Madzohan tentou no Safari e a solução funcionou, mas usando em
document.execCommand('SelectAll')
vez de usar.select()
(como especificado no bate-papo e nos comentários abaixo).Como o PointZeroTwo aponta nos comentários , o código pode ser aprimorado para retornar um resultado de sucesso / falha. Você pode ver uma demonstração neste jsFiddle .
ATUALIZAÇÃO: COPIAR MANTER O FORMATO DO TEXTO
Como um usuário apontou na versão em espanhol do StackOverflow , as soluções listadas acima funcionam perfeitamente se você deseja copiar o conteúdo de um elemento literalmente, mas não funcionam muito bem se você deseja colar o texto copiado com o formato (como é copiado para um
input type="text"
, o formato é "perdido").Uma solução para isso seria copiar para um conteúdo editável
div
e copiá-lo usando o deexecCommand
maneira semelhante. Aqui está um exemplo - clique no botão copiar e cole na caixa editável do conteúdo abaixo:E no jQuery, seria assim:
fonte
aux.style.position = "fixed";
aux.style.top = 0;
acima daappendChild
chamada.O clipboard.js é um bom utilitário que permite copiar dados de texto ou HTML para a área de transferência sem o uso do Flash. É muito fácil de usar; inclua apenas .js e use algo como isto:
clipboard.js também está no GitHub .
Editar em 15 de janeiro de 2016: A resposta principal foi editada hoje para referenciar a mesma API na minha resposta postada em agosto de 2015. O texto anterior estava instruindo os usuários a usar o ZeroClipboard. Só quero deixar claro que eu não arranquei isso da resposta de jfriend00, e sim o contrário.
fonte
A simplicidade é a sofisticação final.
Se você não deseja que o texto a ser copiado fique visível:
jQuery:
HTML:
fonte
Com quebras de linha (extensão da resposta de Alvaro Montoro)
fonte
Você pode usar esse código para copiar o valor de entrada na página na área de transferência, clicando em um botão
Este é html
Então, para este html, devemos usar este código JQuery
Esta é a solução mais simples para esta pergunta
fonte
Uma abordagem ainda melhor sem flash ou outros requisitos é o clipboard.js . Tudo que você precisa fazer é adicionar
data-clipboard-target="#toCopyElement"
qualquer botão, inicializá-lonew Clipboard('.btn');
e ele copiará o conteúdo do DOM com o IDtoCopyElement
para a área de transferência. Este é um trecho que copia o texto fornecido na sua pergunta por meio de um link.Uma limitação, porém, é que ele não funciona no safari, mas funciona em todos os outros navegadores, incluindo navegadores móveis, pois não usa flash
fonte
fonte
fonte
.addClass("hidden")
à<input>
tag para que ela nunca apareça no navegador?É muito importante que o campo de entrada não tenha
display: none
. O navegador não selecionará o texto e, portanto, não será copiado. Useopacity: 0
com uma largura de 0px para corrigir o problema.fonte
É um método mais simples de copiar o conteúdo
fonte
solução simples jQuery.
Deve ser acionado pelo clique do usuário.
fonte
você pode simplesmente usar esta biblioteca para realizar facilmente o objetivo da cópia!
https://clipboardjs.com/
ou
https://github.com/zeroclipboard/zeroclipboard
http://zeroclipboard.org/
fonte
O texto a copiar está na entrada de texto, como:
<input type="text" id="copyText" name="copyText">
e, no botão, clique acima do texto deve ser copiado para a área de transferência, portanto, o botão é como:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button>
Seu script deve ser como:Para arquivos CDN
nota :
ZeroClipboard.swf
eZeroClipboard.js
"o arquivo deve estar na mesma pasta que o seu arquivo usando esta funcionalidade, OU você deve incluir o que incluímos<script src=""></script>
em nossas páginas.fonte
A maioria das respostas propostas cria um elemento de entrada oculto temporário extra. Como a maioria dos navegadores atualmente oferece suporte à edição de conteúdo div, proponho uma solução que não cria elemento (s) oculto (s), preserva a formatação do texto e usa a biblioteca JavaScript ou jQuery pura.
Aqui está uma implementação de esqueleto minimalista usando o menor número de linhas de códigos que eu poderia pensar:
fonte
A biblioteca Clipboard-polyfill é um polyfill para a moderna API de área de transferência assíncrona baseada em Promise.
instalar na CLI:
importar como área de transferência no arquivo JS
exemplo
Estou usando-o em um pacote
require("babel-polyfill");
e testado no chrome 67. Tudo de bom para a produção.fonte
código html aqui
CÓDIGO JS:
fonte
você pode copiar um texto individual além do texto de um elemento HTML.
fonte
JS puro, sem onclick embutido, para classes emparelhadas "conteúdo - botão de cópia". Seria mais confortável, se você tiver muitos elementos)
Suporte para navegador mais antigo:
Mostrar snippet de código
fonte
Ambos funcionam como um encanto :),
JAVASCRIPT:
Também em html,
JQUERY: https://paulund.co.uk/jquery-copy-clipboard
fonte