Il sito che aggiunge il fastidioso "Leggi di più" è ShareThis.
Per prevenire questo cattivo comportamento, hai tre diverse alternative:
Disabilita gli eventi degli Appunti
Questi siti Web utilizzano le API degli Appunti , che consentono agli sviluppatori Web di intercettare le azioni copia / taglia / incolla ed eseguono del codice quando vengono eseguite. Ecco come funziona ShareThis (e altri siti simili). Aspetta semplicemente l'evento di copia e subito prima che venga eseguita la copia effettiva aggiunge un ulteriore "strato" di testo che contiene il fastidioso "- Vedi ...".
Ora la domanda è: esiste qualche tipo di metodo per disabilitare gli eventi degli Appunti? Sfortunatamente, non sono stato in grado di trovare un metodo per farlo in Chrome / Chromium, ma in Firefox è possibile in due modi diversi.
- Entra
about:config
e cerca dom.event.clipboardevents.enabled
. Fare doppio clic sul tasto (impostarlo su false
) e voilà! Hai disabilitato gli eventi degli Appunti e nessuno toccherà più gli Appunti.
- Per le versioni precedenti di Firefox (molto, molto più vecchie), c'è questa estensione che fa esattamente la stessa cosa
about:config
dell'opzione.
La disabilitazione degli eventi negli Appunti non dovrebbe danneggiare l'esperienza di alcun sito Web poiché sono usati raramente e non c'è davvero uno scopo per usarli (oltre allo spamming).
Passiamo alla seconda soluzione.
Block Share Questo
Se non hai bisogno di ShareThis, puoi semplicemente bloccare il w.sharethis.com
dominio. Il Javascript responsabile del caricamento di ShareThis (e della registrazione di ClipboardEvent
) viene caricato da quel sito Web.
È possibile bloccarlo in diversi modi, che vanno da un semplice filtro AdBlock alla modifica del file hosts (questo non è coperto né collegato qui poiché non riesco a inserire più collegamenti a causa della mia reputazione).
Un esempio di farlo tramite il hosts
file:
127.0.0.1 w.sharethis.com
La terza soluzione è la più difficile e dovrebbe essere utilizzata solo come ultima risorsa.
Disabilita la funzione di selezione sui siti Web problematici
Per modificare il contenuto che viene copiato negli Appunti, questi siti Web utilizzano l' Selection
API che consente loro di modificare le selezioni al volo. Quindi, una soluzione è disabilitare completamente qualsiasi tipo di Selection
(sul lato del codice, ovviamente. Sarai comunque in grado di eseguire selezioni).
Questo può essere fatto con un semplice script Tampermonkey / Greasemonkey. L'ho provato solo su Firefox poiché al momento non riesco a installare Chrome. Mi dispiace per questo.
Questo è il codice sorgente:
// ==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);
})();
Per far funzionare tutto ciò, è necessario creare un nuovo script Greasemonkey / Tampermonkey e modificare le @include
direttive. Puoi mettere un sito Web per riga e deve essere fatto come @include http://bad.website.address/
.
L'ho provato con entrambi i siti Web che hai collegato e funziona senza problemi. Tuttavia, tieni presente che ciò può causare problemi poiché Selection
i siti Web vengono utilizzati da siti Web perfettamente legittimi (ad esempio, le caselle di testo StackExchange li utilizzano per inserire un simbolo, quando fai clic sul pulsante, nella posizione del cursore), quindi dovresti abilitare che gli utenti scrivono solo su siti Web problematici.
(nota che potrebbe essere necessario rimuovere le righe che iniziano con //
se stai creando lo script utente dai menu Greasemonkey / Tampermonkey, lo aggiungeranno automaticamente)
La spiegazione dello script utente è piuttosto semplice. Innanzitutto, definisce una funzione denominata disableSelections
che sostituisce il valore predefinito document.getSelection
e window.getSelection
funzioni con una che restituisce semplicemente un oggetto contenente { isCollapsed: true }
. Perché? Perché ShareThis (ho controllato il loro codice JS) chiama quella funzione e controlla se la isCollapsed
proprietà è impostata su true
(se lo è, blocca l'avvelenamento degli Appunti). Altri siti Web del genere potrebbero non eseguire tale controllo, ma finiranno semplicemente con un errore quando provano a chiamare una funzione legittima Selection
dell'oggetto.
Quindi la funzione viene iniettata nel corpo / intestazione / documento e verrà eseguita automaticamente. Una domanda che potresti porre è: se Javascript consente di sovrascrivere (quasi) ogni funzione, perché non hai ignorato la addEventListener
funzione per non fare semplicemente nulla quando l'evento è copia / taglia / incolla? La risposta è molto semplice. Uno script utente viene eseguito in un momento non facilmente prevedibile, ciò significa che ShareThis Javascript può essere caricato prima dello script utente e non farà nulla. Invece, semplicemente sovrascrivendo la window.getSelection
funzione non ci saranno problemi poiché quella funzione viene chiamata solo quando viene eseguita una copia, e siamo sicuri al 100% che quando copi un testo, lo script utente è già stato caricato.
Conclusione
La soluzione migliore e più pulita è ovviamente la prima, poiché disabilita un'API praticamente inutile.
Anche il secondo è valido, ma perderai qualsiasi funzionalità di ShareThis.
Il terzo è il più "schifoso", ma come ultima risorsa potrebbe funzionare.