Einige Websites verwenden jetzt einen JavaScript-Dienst von Tynt , der Text an kopierte Inhalte anfügt.
Wenn Sie damit Text von einer Site kopieren und dann einfügen, erhalten Sie einen Link zum Originalinhalt am Ende des Textes.
Tynt verfolgt dies auch, wenn es passiert. Es ist ein ordentlicher Trick, der gut gemacht ist.
Ihr Skript dafür ist beeindruckend - anstatt zu versuchen, die Zwischenablage zu manipulieren (was nur ältere Versionen von IE standardmäßig zulassen und die immer deaktiviert sein sollten), manipulieren sie die eigentliche Auswahl.
Wenn Sie also einen Textblock auswählen, wird der zusätzliche Inhalt als versteckter Inhalt <div>
in Ihre Auswahl aufgenommen. Wenn Sie einfügen, wird der zusätzliche Stil ignoriert und der zusätzliche Link wird angezeigt.
Dies ist eigentlich ziemlich einfach mit einfachen Textblöcken zu tun, aber ein Albtraum, wenn man alle Auswahlmöglichkeiten berücksichtigt, die für komplexes HTML in verschiedenen Browsern möglich sind.
Ich entwickle eine Webanwendung - ich möchte nicht, dass jemand den kopierten Inhalt verfolgen kann, und ich möchte, dass die zusätzlichen Informationen etwas Kontextuelles und nicht nur einen Link enthalten. Der Service von Tynt ist in diesem Fall nicht wirklich angemessen.
Kennt jemand eine Open-Source-JavaScript-Bibliothek (möglicherweise ein jQuery-Plug-In oder ähnliches), die ähnliche Funktionen bietet, jedoch keine internen Anwendungsdaten verfügbar macht?
quelle
Antworten:
2020 Update
Lösung, die auf allen aktuellen Browsern funktioniert .
[Älterer Beitrag - vor dem Update 2020]
Es gibt zwei Möglichkeiten, dem kopierten Webtext zusätzliche Informationen hinzuzufügen.
1. Bearbeiten der Auswahl
Die Idee ist, nach dem zu
copy event
suchen, dann einen versteckten Container mit unseren zusätzlichen Informationen an das anzuhängendom
und die Auswahl darauf zu erweitern.Diese Methode wurde aus diesem Artikel von c.bavota angepasst . Überprüfen Sie auch die Version von jitbit auf komplexere Fälle.
2. Bearbeiten der Zwischenablage
Die Idee ist,
copy event
die Zwischenablagedaten zu beobachten und direkt zu ändern. Dies ist über dieclipboardData
Eigenschaft möglich. Beachten Sie, dass diese Eigenschaft in allen gängigen Browsern in verfügbar istread-only
. DiesetData
Methode ist nur im IE verfügbar.quelle
window.clipboardData
zuevent.clipboardData
. IE (auch v11) unterstütztevent.clipboardData
jsfiddle.net/m56af0je/8Dies ist eine Vanille-Javascript-Lösung aus einer der oben modifizierten Lösungen, unterstützt jedoch mehr Browser (Cross-Browser-Methode)
quelle
Die kürzeste Version für jQuery, die ich getestet habe und die funktioniert, ist:
quelle
Hier ist ein Plugin in jquery, um dies zu tun. Https://github.com/niklasvh/jquery.plugin.clipboard Aus der Projekt-Readme- Datei "Dieses Skript ändert den Inhalt einer Auswahl, bevor ein Kopierereignis aufgerufen wird, was zur kopierten Auswahl führt anders sein als das, was der Benutzer ausgewählt hat.
Auf diese Weise können Sie der Auswahl Inhalte anhängen / voranstellen, z. B. Copyright-Informationen oder andere Inhalte.
Veröffentlicht unter MIT-Lizenz "
quelle
Verbessern Sie die Antwort und stellen Sie die Auswahl nach den Änderungen wieder her, um eine zufällige Auswahl nach dem Kopieren zu verhindern.
quelle
var range = selection.getRangeAt(0);
Verbesserung für 2018
quelle
var selection = window.getSelection();
durch diese ersetzen :var selection = getSelectionHtml();
Auch eine etwas kürzere Lösung:
quelle
Es ist eine Zusammenstellung von 2 Antworten oben + Kompatibilität mit Microsoft Edge.
Ich habe am Ende auch eine Wiederherstellung der ursprünglichen Auswahl hinzugefügt, wie dies standardmäßig in jedem Browser erwartet wird.
quelle