Le site qui ajoute le truc ennuyeux "En savoir plus" est ShareThis.
Pour éviter ce mauvais comportement, vous avez trois alternatives différentes:
Désactiver les événements du presse-papiers
Ces sites Web utilisent les API Clipboard , qui permettent aux développeurs Web d'intercepter les actions de copier / couper / coller et d'exécuter du code lorsqu'elles sont effectuées. C'est ainsi que ShareThis (et d'autres sites Web comme celui-ci) fonctionne. Il attend simplement l'événement de copie et juste avant que la copie effective soit effectuée, il ajoute une "couche" de texte supplémentaire qui contient le "- Voir ..." ennuyeux.
Maintenant, la question est: existe-t-il une sorte de méthode pour désactiver les événements du presse-papiers? Malheureusement, je n'ai pas pu trouver de méthode pour le faire dans Chrome / Chromium, mais dans Firefox, c'est possible de deux manières différentes.
- Entrez
about:config
et recherchez dom.event.clipboardevents.enabled
. Double-cliquez sur la clé (réglez-la sur false
) et le tour est joué! Vous avez désactivé les événements du presse-papiers et personne ne touchera à nouveau votre presse-papiers.
- Pour les anciennes versions de Firefox (vraiment, vraiment plus anciennes), il y a cette extension qui fait exactement la même chose que l'
about:config
option.
La désactivation des événements du presse-papiers ne devrait pas nuire à l'expérience d'un site Web, car ils sont rarement utilisés et il n'y a pas vraiment de raison de les utiliser (à l'exception du spam).
Passons à la deuxième solution.
Bloquer ShareThis
Si vous n'avez pas besoin de ShareThis, vous pouvez simplement bloquer le w.sharethis.com
domaine. Le Javascript responsable du chargement de ShareThis (et de l'enregistrement ClipboardEvent
) est chargé à partir de ce site Web.
Vous pouvez le bloquer de différentes manières, allant d'un simple filtre AdBlock à la modification de votre fichier d'hôtes (ce n'est pas couvert ni lié ici car je ne peux pas mettre plus de liens en raison de ma réputation).
Un exemple de faire cela via le hosts
fichier:
127.0.0.1 w.sharethis.com
La troisième solution est la plus difficile et ne doit être utilisée qu'en dernier recours.
Désactiver la fonction de sélection sur les sites Web problématiques
Pour modifier le contenu copié dans le presse-papiers, ces sites Web utilisent l' Selection
API qui leur permet de modifier des sélections à la volée. Ainsi, une solution consiste à désactiver complètement tout type de Selection
(côté code, évidemment. Vous pourrez toujours effectuer des sélections).
Cela peut être fait avec un simple script Tampermonkey / Greasemonkey. Je l'ai testé uniquement sur Firefox car je ne peux pas installer Chrome pour le moment. Je suis désolé pour ça.
Voici le code source:
// ==UserScript==
// @name Goodbye selections
// @namespace tag: utils
// @include $put_here_a_website_you'd_like_to_disable_selections$
// @include $more_websites$
// @version 1
// @grant none
// ==/UserScript==
(function() {
var disableSelections = function() {
document.getSelection = window.getSelection = function() {
return { isCollapsed: true };
};
};
var script = document.createElement ("script");
script.appendChild (document.createTextNode ("(" + disableSelections + ")();"));
(document.body || document.head || document.documentElement).appendChild (script);
})();
Pour que cela fonctionne, vous devez créer un nouveau script Greasemonkey / Tampermonkey et ajuster les @include
directives. Vous pouvez mettre un site Web par ligne, et cela doit être fait comme @include http://bad.website.address/
.
Je l'ai testé avec les sites Web que vous avez liés et cela fonctionne sans problème. Cependant, gardez à l'esprit que cela peut causer des problèmes car les Selection
s sont utilisés par des sites Web parfaitement légitimes (par exemple, les zones de texte StackExchange les utilisent pour insérer un symbole, lorsque vous cliquez sur le bouton, à la position de votre curseur), vous devez donc activer ce script utilisateur uniquement sur les sites Web problématiques.
(notez que vous devrez peut-être supprimer les lignes commençant par //
si vous créez le script utilisateur à partir des menus Greasemonkey / Tampermonkey, ils l'ajouteront automatiquement)
L'explication du script utilisateur est assez simple. Tout d'abord, il définit une fonction nommée disableSelections
qui remplace la fonction par défaut document.getSelection
et window.getSelection
fonctionne avec une fonction qui renvoie simplement un objet contenant { isCollapsed: true }
. Pourquoi? Parce que ShareThis (j'ai vérifié leur code JS) appelle cette fonction et vérifie si la isCollapsed
propriété est définie sur true
(si c'est le cas, elle arrête «l'empoisonnement du presse-papiers»). D'autres sites Web comme celui-ci n'effectueront peut-être pas cette vérification, mais ils se retrouveront simplement avec une erreur lorsqu'ils tenteront d'appeler une fonction légitime de l' Selection
objet.
Ensuite, la fonction est injectée dans le corps / en-tête / document et elle sera automatiquement exécutée. Une question que vous pouvez vous poser est la suivante: si Javascript permet de remplacer (presque) toutes les fonctions, pourquoi n'avez-vous pas remplacé la addEventListener
fonction pour ne rien faire lorsque l'événement est copié / coupé / collé? La réponse est plutôt simple. Un script utilisateur est exécuté à un moment difficile à prévoir, cela signifie que le Javascript ShareThis peut être chargé avant le script utilisateur, et il ne fera rien. Au lieu de cela, en remplaçant simplement la window.getSelection
fonction, il n'y aura aucun problème puisque cette fonction n'est appelée que lorsqu'une copie est effectuée, et nous sommes sûrs à 100% que lorsque vous copiez un texte, le script utilisateur a déjà été chargé.
Conclusion
La solution la meilleure et la plus propre est évidemment la première, car elle désactive une API pratiquement inutile.
Le second est également valide, mais vous perdrez l'une des fonctionnalités de ShareThis.
Le troisième est le plus "hacky", mais en dernier recours, il pourrait fonctionner.