Wie verhindere ich, dass "Read more: www.site.com" mit Nicht-Tynt-JavaScript in Aktionen zum Kopieren und Einfügen eingefügt wird?


30

Es gibt viele Websites, die beim Kopieren von Text in Ihrem Browser so etwas wie "Read more: www.site.com" in Ihre Zwischenablage einfügen. Ich finde das abscheulich. Eine Google-Suche enthüllt einige Methoden , um dies zu verhindern, wenn die Website zufällig den Dienst Tynt verwendet (indem nur die Tynt-Domain blockiert wird), aber viele Websites verwenden selbst entwickeltes JavaScript.

Gibt es eine allgemeine Möglichkeit, dieses Verhalten zu blockieren, außer nur JavaScript zu deaktivieren? Ich benutze Chrome, bin aber an allen Lösungen interessiert.

EDIT: Um klar zu sein, ich möchte den Rest der JavaScript-Funktionalität für diese Websites beibehalten können, da viele ohne sie brechen werden.

EDIT # 2: Hier sind zwei Beispiel-Websites, die mich trotz der Verwendung eines Tynt-Blockers weiterhin belästigen: Marginal Revolution | The Fiscal Times

Hier sind zwei StackOverflow- Fragen und zwei Blog- Beiträge, in denen erläutert wird, wie diese zwielichtige Praxis ohne Tynt manuell implementiert werden kann. Hier ist ein Blog-Beitrag, der beschreibt, wie schwierig es ist, zuverlässig zu blockieren. Hier ist die letzte Diskussion, die ich finden konnte (März 2013) und die Vorschläge zum Blockieren dieser Funktion in Chrome mit AdBlock enthält, die jedoch bei mir nicht funktioniert hat.

Antworten:


24

Die Seite, die das nervige "Read more" Zeug hinzufügt, ist ShareThis.

Um dieses schlechte Verhalten zu verhindern, haben Sie drei verschiedene Alternativen:

Deaktivieren Sie die Ereignisse in der Zwischenablage

Diese Websites verwenden die APIs der Zwischenablage , mit denen Webentwickler die Aktionen zum Kopieren / Ausschneiden / Einfügen abfangen und bei ihrer Ausführung Code ausführen können. So funktioniert ShareThis (und andere Websites wie diese). Es wartet einfach auf das Kopierereignis und fügt unmittelbar vor dem Ausführen des effektiven Kopiervorgangs eine zusätzliche "Textebene" hinzu, die das lästige "- Siehe ..." enthält.

Die Frage ist nun: Gibt es eine Methode zum Deaktivieren der Ereignisse in der Zwischenablage? Leider konnte ich in Chrome / Chromium keine Methode dafür finden, aber in Firefox ist dies auf zwei verschiedene Arten möglich.

  • Gehen Sie hinein about:configund suchen Sie nach dom.event.clipboardevents.enabled. Doppelklicken Sie auf den Schlüssel (stellen Sie ihn auf false) und voila! Sie haben die Ereignisse in der Zwischenablage deaktiviert und niemand wird Ihre Zwischenablage erneut berühren.
  • Für ältere Versionen von Firefox (wirklich, wirklich älter) gibt es diese Erweiterung , die genau dasselbe wie die about:configOption macht.

Das Deaktivieren von Ereignissen in der Zwischenablage sollte das Erlebnis einer Website nicht beeinträchtigen, da sie selten verwendet werden und nicht wirklich für die Verwendung bestimmt sind (außer für Spam).

Gehen wir zur zweiten Lösung über.

ShareThis blockieren

Wenn Sie ShareThis nicht benötigen, können Sie die w.sharethis.comDomain einfach sperren . Das Javascript, das für das Laden von ShareThis (und das Registrieren von ShareThis ClipboardEvent) verantwortlich ist, wird von dieser Website geladen.

Sie können es auf verschiedene Arten blockieren, angefangen von einem einfachen AdBlock-Filter bis hin zur Bearbeitung Ihrer Hosts-Datei (dies wird hier weder behandelt noch verlinkt, da ich aufgrund meines guten Rufs keine weiteren Links einfügen kann).

Ein Beispiel dafür über die hostsDatei:

127.0.0.1 w.sharethis.com

Die dritte Lösung ist die schwierigste und sollte nur als letztes Mittel eingesetzt werden.

Deaktivieren Sie die Auswahlfunktion auf den problematischen Websites

Um den Inhalt zu bearbeiten, der in die Zwischenablage kopiert wird, verwenden diese Websites die SelectionAPI, mit der sie Auswahlen im Handumdrehen bearbeiten können. Eine Lösung besteht also darin , alle Arten von Elementen vollständig zu deaktivieren Selection(auf der Codeseite natürlich. Sie können weiterhin Auswahlen vornehmen).

Dies kann mit einem einfachen Tampermonkey / Greasemonkey-Skript erfolgen. Ich habe es nur unter Firefox getestet, da ich Chrome momentan nicht installieren kann. Das tut mir leid.

Dies ist der Quellcode:

// ==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);
})();

Damit dies funktioniert, sollten Sie ein neues Greasemonkey / Tampermonkey-Skript erstellen und die @includeAnweisungen anpassen . Sie können eine Website pro Zeile einfügen, und dies muss wie folgt erfolgen @include http://bad.website.address/.

Ich habe es mit beiden von Ihnen verlinkten Websites getestet und es funktioniert ohne Probleme. Beachten Sie jedoch, dass dies zu Problemen führen kann, da Selections von absolut legitimen Websites verwendet werden (z. B. verwenden StackExchange-Textfelder diese zum Einfügen eines Symbols, wenn Sie auf die Schaltfläche klicken, an der Position Ihres Carets). Sie sollten dies daher aktivieren das userscript nur auf problematischen websites.

(Beachten Sie, dass Sie möglicherweise die Zeilen entfernen müssen, die mit beginnen, //wenn Sie das Userscript aus den Greasemonkey / Tampermonkey-Menüs erstellen. Sie werden es automatisch hinzufügen.)

Die Erklärung des Userskripts ist ziemlich einfach. Zunächst wird eine Funktion mit dem Namen definiert, disableSelectionsdie den Standardwert document.getSelectionund die window.getSelectionFunktionen durch eine Funktion ersetzt, die einfach ein Objekt mit dem Namen zurückgibt { isCollapsed: true }. Warum? Weil ShareThis (ich habe ihren JS-Code eingecheckt) diese Funktion aufruft und prüft, ob die isCollapsedEigenschaft auf gesetzt ist true(wenn dies der Fall ist, stoppt es die "Vergiftung der Zwischenablage"). Andere Websites wie diese führen diese Überprüfung möglicherweise nicht durch, aber es kommt einfach zu einem Fehler, wenn sie versuchen, eine legitime Funktion des SelectionObjekts aufzurufen .

Dann wird die Funktion in den Body / Header / Dokument eingefügt und automatisch ausgeführt. Eine Frage, die Sie möglicherweise stellen, lautet: Wenn Javascript (fast) jede Funktion überschreiben kann, warum haben Sie die addEventListenerFunktion nicht überschrieben , um beim Kopieren / Ausschneiden / Einfügen des Ereignisses einfach nichts zu tun? Die Antwort ist ziemlich einfach. Ein UserScript wird zu einem nicht leicht vorhersehbaren Zeitpunkt ausgeführt. Dies bedeutet, dass das ShareThis-Javascript vor dem UserScript geladen werden kann und nichts unternimmt. Wenn Sie die window.getSelectionFunktion einfach überschreiben , gibt es keine Probleme, da diese Funktion nur aufgerufen wird , wenn eine Kopie ausgeführt wird, und wir sind zu 100% sicher, dass das Benutzer-Skript bereits geladen wurde, wenn Sie einen Text kopieren.

Fazit

Die beste und sauberste Lösung ist offensichtlich die erste, da sie eine praktisch nutzlose API deaktiviert.

Die zweite ist ebenfalls gültig, aber Sie verlieren alle Funktionen von ShareThis.

Der dritte ist der "hackigste", aber als letzter Ausweg könnte es funktionieren.


Vielen Dank! Das ist ausgezeichnet. Es ist eine Schande, dass dies so schwierig ist und keine perfekte Lösung bietet, aber Ihre Antwort scheint die beste Information zu sein, die derzeit im Internet verfügbar ist. Sehr erfreut, Ihnen die Prämie zu gewähren.
Jess Riedel

Ja, ich habe einiges recherchiert, da mich dieses Problem ebenfalls betroffen hat. Übrigens vielen Dank für das Kopfgeld - das wird meinem "Newcomer" StackExchange-Erlebnis helfen!
Robertof

Betreff: Blockiert diese Funktion Sites, auf denen Sie auf eine Schaltfläche klicken können, um Text zu kopieren? ZB emojipedia.org/snowman . Empirisch scheint es in Firefox nicht zu sein. Cool. Betreff: ShareThis blockieren, mein Debugger zeigt jetzt die Skripte an, die von den Subdomains "l.sharethis.com" und "ws.sharethis.com" geladen werden. Daher denke ich, dass die einzige vollständige Heilung darin besteht, die gesamte ShareThis.com-Domain zu blockieren, was kein großer Verlust sein sollte. Vielen Dank @Robertof!
Conrad Meyer

Achtung: Das Deaktivieren von Ereignissen in der Zwischenablage kann zu Fehlfunktionen einiger Websites führen. Beispielsweise stürzt Discord beim Einfügen in die Suche ab.
Nicholas

2

Diese abscheulichen Aktionen können in Chrome mit der Erweiterung "Kill Evil" blockiert werden:

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

(BEARBEITEN) Diese Erweiterung scheint auf Facebook seltsame Probleme zu verursachen. Stellen Sie sicher, dass Sie eine Whitelist erstellen.


Ausgezeichnet! Ich habe drei Erweiterungen gefunden, die dieses Problem lösen sollen: 1. Tynt Blocker. 2. RightToCopy. 3. Töte das Böse (dank dir, Möwe). Kill Evil hat die besonders bösen Manipulationen an der Zwischenablage auf phys.org behoben
Dave Burton

1
Keine Sorge @DaveBurton - Bitte beachten Sie, dass diese Erweiterung dazu führt, dass sich viele Websites ziemlich seltsam verhalten. Aktivieren Sie sie daher nur, wenn Sie sie benötigen.
Möwe

2
Kill Evil unterstützt eine Ausschlussliste oder "Whitelist", bei der es sich um eine Liste von Websites handelt, für die die Erweiterung NICHT aktiviert werden soll (dh eine Liste "Übel zulassen"). Das wollte ich nicht: Ich möchte nur Kill Evil ONLY auf einer bestimmten Site (phys.org) aktivieren. Also endete ich mit diesem kniffligen regulären Ausdruck "Negative Lookahead", um Kill Evil mit Ausnahme dieser einen Site zu deaktivieren: ^ https?: \ / \ / (?! ([A-zA-Z0-9 \ - \.] * phys \ .org))
Dave Burton

Lieben Sie ein freches Stück Regex. Vielen Dank für die Veröffentlichung.
Möwe

1

Obwohl es sich um ein Firefox-Addon handelt, können Sie mit NoScript JavaScript von jeder Website blockieren, indem Sie eine nicht vertrauenswürdige Liste erstellen.


2
Danke für die Antwort, aber das ist nicht was ich brauche. (Ich möchte etwas, das JavaScript nicht überall auf der Site kaputt macht.) Ich werde die Frage genauer bearbeiten.
Jess Riedel

1

Wenn Sie nach einer Möglichkeit suchen, das HTML automatisch zu ändern, bevor es angezeigt wird, ist Greasemonkey das Werkzeug, und Sie müssten ein Benutzerskript erstellen, das die Änderung vornimmt.

Aus dem Artikel Einsteigerhandbuch für Greasemonkey-Skripte in Google Chrome :

Chrome unterstützt jetzt von Haus aus Benutzerskripte. Sie müssen keine zusätzliche Erweiterung installieren, um sie zu verwenden. In der Tat behandelt Chrome jedes Benutzerskript als ein individuelles Add-On, sodass Sie es einfach verwalten und entfernen können.

Es gibt viele Informationen über Greasemonkey im Internet, einschließlich vieler Tutorials. Die meisten davon sind für Firefox bestimmt, aus dem Greasemonkey stammt, aber sie gelten heute auch für Chrome.

Als verantwortlich für die Website "Read more" ist sharethis.com. Wenn Sie es blockieren, sollte dies aufhören. Wenn Sie eine Sicherheitssuite installiert haben, blockieren Sie die Site damit. Andernfalls können Sie es mit Ihrer hosts-Datei blockieren .

sharethis.comist der Anbieter, der Tynt an die beiden Websites liefert, die Sie mir gegeben haben. Tynt scheint eher eine Technologie als eine Website zu sein, daher kann es natürlich auch andere solche Anbieter geben, aber man muss hoffen, dass sie eher selten sind.


OK danke. Im Prinzip kann fast alles auf einer Website repariert werden, wenn man ein greasemonkey-Skript anwendet. (Zumindest nehme ich an, dass jedes JavaScript-Problem durch mehr JavaScript behoben werden kann.) Um diese Antwort für das Kopfgeld zu akzeptieren, benötige ich viel mehr Informationen zur Implementierung.
Jess Riedel

Welche Art von Informationen? Man kann mit Wikipedia beginnen , das die wichtigsten Links enthält, einschließlich Wiki und userscripts.org .
Harrymc

Sagen wir, eine Erklärung, wie die Nicht-Tynt-Implementierungen funktionieren und was genau damit geschehen würde? Bisher ist nichts, was Sie geschrieben haben, speziell auf dieses Problem beim Kopieren und Einfügen ausgerichtet (und nicht auf JavaScript im Allgemeinen).
Jess Riedel

Ich habe Tynt noch nie getroffen (kein Wunder, seit ich NoScript verwende). Von den zwei Beispiel-Websites in dem Artikel, auf den Sie verlinkt haben, ist eine verschwunden und die andere verwendet Tynt nicht mehr. Hast du ein Beispiel?
Harrymc

Ich habe eine Bearbeitung vorgenommen, um zwei Beispielwebsites hinzuzufügen, die dieses Verhalten auch dann beibehalten, wenn ich eine Tynt-Blockierungserweiterung verwende.
Jess Riedel

1

Auf Chrom hatte ich Erfolg mit Absolute Enable Right Click & Copy Erweiterung.

Nach der Installation können Sie eine Benutzerliste der Sites hinzufügen, auf denen die Erweiterung in den Einstellungen aktiviert ist. Wenn Sie sich auf einer bestimmten Seite befinden und feststellen, dass sie Ihre Zwischenablage manipuliert, können Sie diese Erweiterung über die Symbolleistenschaltfläche sofort aktivieren (dadurch wird die Site automatisch zu Ihrer Liste hinzugefügt).


0

Alternativ können Sie die Erweiterung "Als einfachen Text kopieren" für Chrome verwenden. Sie haben dann im Menü neben dem normalen Kopieren noch eine weitere Option. Es hat den Vorteil, dass es in Chrome funktioniert und nichts kaputt macht. https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog


Wenn man den Namen bedenkt, würde man denken, dass das Kopieren von formatiertem Text unterbrochen wird? Das ist für manche Leute manchmal nützlich.
Conrad Meyer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.