Come evitare che "Leggi di più: www.site.com" venga iniettato con JavaScript non Tynt nelle azioni copia-incolla?


30

Ci sono molti siti che inseriscono qualcosa come "Leggi di più: www.site.com" negli Appunti quando copi il testo nel tuo browser. Lo trovo abominevole. Una ricerca su Google rivela alcuni metodi per fermarlo se il sito Web utilizza il servizio Tynt (bloccando semplicemente il dominio Tynt), ma molti siti Web utilizzano JavaScript sviluppato in casa.

Esiste un modo generale per bloccare questo comportamento oltre a disattivare JavaScript? Uso Chrome ma sono interessato a tutte le soluzioni.

EDIT: Per essere chiari, voglio essere in grado di mantenere il resto della funzionalità JavaScript per questi siti Web, poiché molti si romperanno senza di essa.

EDIT # 2: Ecco due siti Web di esempio che continuano a molestarmi nonostante il mio uso di un blocco Tynt: Marginal Revolution | The Fiscal Times

Ecco due domande su StackOverflow e due post sul blog che spiegano come implementare manualmente questa pratica losca senza Tynt. Ecco un post sul blog che descrive quanto sia difficile bloccarlo in modo affidabile. Ecco la discussione più recente che ho potuto trovare (marzo 2013) che offre suggerimenti su come bloccarlo in Chrome utilizzando AdBlock, ma non ha funzionato per me.

Risposte:


24

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:confige 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:configdell'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.comdominio. 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 hostsfile:

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' SelectionAPI 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 @includedirettive. 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é Selectioni 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 disableSelectionsche sostituisce il valore predefinito document.getSelectione window.getSelectionfunzioni 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 isCollapsedproprietà è 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 Selectiondell'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 addEventListenerfunzione 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.getSelectionfunzione 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.


Grazie mille! Questo è eccellente È un peccato che sia così difficile e non abbia una soluzione perfetta, ma la tua risposta sembra essere la migliore informazione attualmente disponibile su Internet. Molto lieto di assegnarti la generosità.
Jess Riedel,

Sì, ho fatto un bel po 'di ricerche dato che anche quel problema mi stava colpendo. Grazie per la generosità, questo aiuterà la mia esperienza StackExchange "nuovo arrivato"!
Robertof,

Ri: il primo, questo blocca i siti in cui è possibile fare clic su un pulsante per copiare del testo? Ad esempio, emojipedia.org/snowman . Empiricamente, in Firefox, non sembra. Freddo. Ri: blocco ShareThis, il mio debugger ora mostra gli script caricati dai sottodomini "l.sharethis.com" e "ws.sharethis.com". Quindi penso che l'unica cura completa sia bloccare l'intero dominio ShareThis.com, che non dovrebbe essere una grande perdita. Grazie @Robertof!
Conrad Meyer,

Attenzione: la disabilitazione degli eventi negli Appunti può causare il malfunzionamento di alcuni siti. Ad esempio, Discord si arresta in modo anomalo quando si incolla nella ricerca.
Nicholas

2

Queste azioni odiose possono essere bloccate su Chrome con l'estensione "Kill Evil":

https://chrome.google.com/webstore/detail/kill-evil/epieehnpcepgfiildhdklacomihpoldk

(EDIT) Questa estensione sembra causare strani problemi su Facebook, assicurati di inserirla nella whitelist.


Eccellente! Ho trovato tre estensioni che pretendono di risolvere questo problema: 1. Tynt Blocker. 2. RightToCopy. 3. Kill Evil (grazie a te, gabbiano). Kill Evil è quello che ha lavorato per correggere le manipolazioni degli appunti particolarmente brutte su phys.org,
Dave Burton

1
non preoccuparti @DaveBurton - tieni presente che questa estensione fa sì che molti siti si comportino in modo piuttosto strano, quindi abilitalo solo quando ne hai bisogno.
gabbiano

2
Kill Evil supporta un elenco di esclusioni o "whitelist", che è un elenco di siti per i quali NON si desidera abilitare l'estensione (ovvero un elenco "consenti male"). Non era quello che volevo: voglio solo abilitare Kill Evil SOLO su un determinato sito (phys.org). Così ho finito con questa delicata espressione regolare di "sguardo negativo", per disabilitare Kill Evil ad eccezione di quel sito: ^ https?: \ / \ / (?! ([A-zA-Z0-9 \ - \.] * phys \ .org))
Dave Burton,

Adoro un po 'sfacciato di regex. Grazie per averlo pubblicato.
gabbiano

1

Sebbene sia un componente aggiuntivo di Firefox, NoScript consente di bloccare JavaScript da qualsiasi sito Web impostando un elenco non attendibile.


2
Grazie per la risposta, ma questo non è ciò di cui ho bisogno. (Voglio qualcosa che non rompa JavaScript ovunque sul sito.) Modificherò la domanda per essere più specifici.
Jess Riedel,

1

Se stai cercando un modo per modificare automaticamente l'HTML prima che venga visualizzato, Greasemonkey è lo strumento e dovrai creare uno script utente che esegua la modifica.

Dall'articolo Guida per principianti per gli script Greasemonkey in Google Chrome :

Chrome ora supporta nativamente gli script utente. Non è necessario installare un'estensione aggiuntiva per usarli; infatti, Chrome considera ogni script utente come un singolo componente aggiuntivo in modo da poterlo gestire e rimuovere facilmente.

Ci sono molte informazioni su Greasemonkey reperibili su Internet, inclusi molti tutorial. La maggior parte di questi sarebbe per Firefox, da dove nacque Greasemonkey, ma si applicano anche oggi a Chrome.

Come è il sito responsabile del "Leggi di più" sharethis.com. Se lo blocchi, questo dovrebbe fermarsi. Se hai installato una suite di sicurezza, usala per bloccare il sito. Altrimenti puoi bloccarlo usando il tuo file hosts .

sharethis.comè il fornitore che fornisce Tynt ai due siti Web che mi hai fornito. Tynt sembra essere piuttosto una tecnologia piuttosto che un sito Web, quindi ovviamente potrebbero esserci altri fornitori di questo tipo, ma bisogna sperare che siano piuttosto rari.


Ok grazie. In linea di principio, qualsiasi cosa su un sito Web può essere risolta se si applica uno script greasemonkey. (Almeno, presumo che qualsiasi problema JavaScript possa essere risolto con più JavaScript.) Per accettare questa risposta per la generosità, avrei bisogno di molte più informazioni su come implementarlo.
Jess Riedel,

Che tipo di informazioni? Si può iniziare con Wikipedia che fornisce i collegamenti più importanti tra cui il wiki e userscripts.org .
harrymc,

Diciamo, una spiegazione di come funzionano le implementazioni non Tynt e cosa si farebbe esattamente su di esse? Finora nulla di ciò che hai scritto è nemmeno specifico di questo problema di copia-incolla (piuttosto che JavaScript in generale).
Jess Riedel,

Non ho mai incontrato Tynt (non c'è da stupirsi da quando utilizzo NoScript). Dai due siti Web di esempio nell'articolo a cui sei collegato, uno è scomparso e l'altro non utilizza più Tynt. Hai un esempio?
harrymc,

Ho apportato una modifica per aggiungere due siti Web di esempio che continuano ad avere questo comportamento anche quando utilizzo un'estensione che blocca Tynt.
Jess Riedel,

1

Su Chromium ho avuto successo con l' estensione Absolute Enable Right Click & Copy .

Dopo averlo installato, è possibile aggiungere un elenco utenti di siti in cui l'estensione è abilitata nelle preferenze. Oppure, quando ti trovi in ​​una determinata pagina e vedi che si manomette negli Appunti, puoi abilitare questa estensione al volo tramite il pulsante della barra degli strumenti (questo aggiunge automaticamente il sito al tuo elenco).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.