Certains sites Web utilisent désormais un service JavaScript de Tynt qui ajoute du texte au contenu copié.
Si vous copiez du texte à partir d'un site en utilisant ceci, puis collez, vous obtenez un lien vers le contenu d'origine au bas du texte.
Tynt suit également cela au fur et à mesure. C'est une belle astuce bien faite.
Leur script pour faire cela est impressionnant - plutôt que d'essayer de manipuler le presse-papiers (ce que seules les anciennes versions d'IE leur permettent de faire par défaut et qui devrait toujours être désactivé), ils manipulent la sélection réelle.
Ainsi, lorsque vous sélectionnez un bloc de texte, le contenu supplémentaire est ajouté en tant que caché <div>
inclus dans votre sélection. Lorsque vous collez le style supplémentaire est ignoré et le lien supplémentaire apparaît.
C'est en fait assez facile à faire avec de simples blocs de texte, mais c'est un cauchemar quand on considère toutes les sélections possibles dans un HTML complexe dans différents navigateurs.
Je développe une application Web - je ne veux pas que quiconque puisse suivre le contenu copié et j'aimerais que les informations supplémentaires contiennent quelque chose de contextuel, plutôt qu'un simple lien. Le service de Tynt n'est pas vraiment approprié dans ce cas.
Quelqu'un connaît-il une bibliothèque JavaScript open source (peut-être un plug-in jQuery ou similaire) qui fournit des fonctionnalités similaires mais qui n'expose pas les données d'application internes?
la source
Réponses:
Mise à jour 2020
Solution qui fonctionne sur tous les navigateurs récents .
[Article plus ancien - avant la mise à jour 2020]
Il existe deux méthodes principales pour ajouter des informations supplémentaires au texte Web copié.
1. Manipulation de la sélection
L'idée est de surveiller le
copy event
, puis d'ajouter un conteneur caché avec nos informations supplémentaires audom
, et d'y étendre la sélection.Cette méthode est adaptée de cet article par c.bavota . Vérifiez également la version de jitbit pour des cas plus complexes.
2. Manipulation du presse-papiers
L'idée est de regarder
copy event
et de modifier directement les données du presse-papiers. Ceci est possible en utilisant laclipboardData
propriété. Notez que cette propriété est disponible dans tous les principaux navigateurs deread-only
; lasetData
méthode n'est disponible que sur IE.la source
window.clipboardData
àevent.clipboardData
. IE (v11 aussi) ne prend pas en chargeevent.clipboardData
jsfiddle.net/m56af0je/8Ceci est une solution javascript vanille d'une solution modifiée ci-dessus mais prend en charge plus de navigateurs (méthode de navigateur croisé)
la source
La version la plus courte de jQuery que j'ai testée et qui fonctionne est:
la source
Voici un plugin dans jquery pour faire ça https://github.com/niklasvh/jquery.plugin.clipboard Depuis le fichier readme du projet "Ce script modifie le contenu d'une sélection avant qu'un événement de copie ne soit appelé, résultant en la sélection copiée étant différent de ce que l'utilisateur a sélectionné.
Cela vous permet d'ajouter / ajouter du contenu à la sélection, comme des informations sur les droits d'auteur ou tout autre contenu.
Publié sous licence MIT "
la source
Amélioration de la réponse, restaurez la sélection après les modifications pour éviter les sélections aléatoires après la copie.
la source
var range = selection.getRangeAt(0);
Amélioration pour 2018
la source
var selection = window.getSelection();
par celle-ci:var selection = getSelectionHtml();
Aussi une solution un peu plus courte:
la source
C'est une compilation de 2 réponses ci-dessus + compatibilité avec Microsoft Edge.
J'ai également ajouté une restauration de la sélection d'origine à la fin, comme prévu par défaut dans n'importe quel navigateur.
la source