Alguns sites agora usam um serviço JavaScript da Tynt que anexa texto ao conteúdo copiado.
Se você copiar o texto de um site usando isso e depois colar, obterá um link para o conteúdo original na parte inferior do texto.
Tynt também rastreia isso conforme acontece. É um truque legal bem executado.
Seu script para fazer isso é impressionante - em vez de tentar manipular a área de transferência (o que apenas as versões mais antigas do IE permitem fazer por padrão e que deve estar sempre desligada), eles manipulam a seleção real.
Portanto, quando você seleciona um bloco de texto, o conteúdo extra é adicionado como oculto <div>
incluído em sua seleção. Quando você cola, o estilo extra é ignorado e o link extra aparece.
Na verdade, isso é bastante fácil de fazer com blocos de texto simples, mas um pesadelo quando você considera todas as seleções possíveis em HTML complexo em navegadores diferentes.
Estou desenvolvendo um aplicativo da web - não quero que ninguém rastreie o conteúdo copiado e gostaria que as informações extras contivessem algo contextual, em vez de apenas um link. O serviço de Tynt não é realmente apropriado neste caso.
Alguém conhece uma biblioteca JavaScript de código aberto (talvez um plug-in jQuery ou semelhante) que fornece funcionalidade semelhante, mas que não expõe dados internos do aplicativo?
fonte
Respostas:
Atualização de 2020
Solução que funciona em todos os navegadores recentes .
[Postagem mais antiga - antes da atualização de 2020]
Existem duas maneiras principais de adicionar informações extras ao texto da web copiado.
1. Manipulando a seleção
A ideia é observar o e
copy event
, em seguida, anexar um contêiner oculto com nossas informações extras aodom
e estender a seleção a ele.Este método foi adaptado deste artigo por c.bavota . Verifique também a versão de jitbit para casos mais complexos.
2. Manipulando a área de transferência
A ideia é observar
copy event
e modificar diretamente os dados da área de transferência. Isso é possível usando aclipboardData
propriedade. Observe que esta propriedade está disponível em todos os principais navegadores emread-only
; osetData
método está disponível apenas no IE.fonte
window.clipboardData
paraevent.clipboardData
. IE (v11 também) não é compatível comevent.clipboardData
jsfiddle.net/m56af0je/8Esta é uma solução javascript vanilla de uma solução modificada acima, mas oferece suporte a mais navegadores (método de navegador cruzado)
fonte
A versão mais curta do jQuery que testei e está funcionando é:
fonte
Aqui está um plugin em jquery para fazer isso https://github.com/niklasvh/jquery.plugin.clipboard Do leia-me do projeto "Este script modifica o conteúdo de uma seleção antes de um evento de cópia ser chamado, resultando na seleção copiada ser diferente do que o usuário selecionou.
Isso permite que você anexe / prefixe conteúdo à seleção, como informações de direitos autorais ou outro conteúdo.
Lançado sob licença MIT "
fonte
Melhorando a resposta, restaure a seleção após as alterações para evitar seleções aleatórias após a cópia.
fonte
var range = selection.getRangeAt(0);
Melhoria para 2018
fonte
var selection = window.getSelection();
por esta:var selection = getSelectionHtml();
Também uma solução um pouco mais curta:
fonte
É uma compilação de 2 respostas acima + compatibilidade com Microsoft Edge.
Também adicionei uma restauração da seleção original no final, como é esperado por padrão em qualquer navegador.
fonte