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:config
und 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:config
Option 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.com
Domain 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 hosts
Datei:
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 Selection
API, 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 @include
Anweisungen 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 Selection
s 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, disableSelections
die den Standardwert document.getSelection
und die window.getSelection
Funktionen 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 isCollapsed
Eigenschaft 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 Selection
Objekts 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 addEventListener
Funktion 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.getSelection
Funktion 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.