Wie kann ich "Video speichern unter ..." im Kontextmenü eines Browsers deaktivieren, um zu verhindern, dass Clients ein Video herunterladen?
Gibt es umfassendere Lösungen, die verhindern, dass der Client direkt auf einen Dateipfad zugreift?
javascript
html
menu
html5-video
right-click
Python
quelle
quelle
File→Save As
) speichern . Selbst wenn Sie das irgendwie blockieren könnten, können sie die Quellansicht anzeigen , um die URL der Datei zu finden. Selbst wenn Sie das ein wenig verschleiern könnten, können sie es aus dem Cache rippen. Selbst wenn Sie dies erschweren könnten (z. B. Stream), können sie den Netzwerkverkehr mit einem Sniffer oder etwas anderem erfassen. Tatsache ist, wenn Sie es an einen Benutzer senden, kann dieser es speichern. Daran führt kein Weg vorbei. Die Frage, die Sie stellen müssen, ist, warum Sie es so sehr stoppen müssen. Ist es wirklich überhaupt so notwendig? Lohnt sich die Mühe und Benutzerunfreundlichkeit?Antworten:
Das kannst du nicht . Das liegt daran, dass Browser genau dafür entwickelt wurden: Inhalte bereitstellen . Aber man kann es schwieriger machen herunterladen .
Das erste , was ist zuerst, Sie könnten das deaktivieren
contextmenu
Ereignis , auch bekannt als „die rechte Maustaste“. Dies würde verhindern, dass Ihr normaler Skiddie Ihr Video durch Klicken mit der rechten Maustaste und Speichern unter krass rippt. Aber dann könnten sie einfach JS deaktivieren und dies umgehen oder die Videoquelle über den Debugger des Browsers finden. Plus das ist schlechtes UX. In einem Kontextmenü gibt es viele legitime Dinge als nur Speichern unter.Sie können auch benutzerdefinierte Videoplayer-Bibliotheken verwenden. Die meisten von ihnen implementieren Videoplayer, die das Kontextmenü nach Ihren Wünschen anpassen. Sie erhalten also nicht das Standard-Browser-Kontextmenü. Und wenn sie jemals einen Menüpunkt ähnlich wie Speichern unter bedienen, können Sie ihn deaktivieren. Aber auch dies ist eine JS-Problemumgehung. Schwächen ähneln der vorherigen Option.
Eine andere Möglichkeit besteht darin, das Video über HTTP Live Streaming bereitzustellen . Im Wesentlichen wird das Video in Stücke geschnitten und nacheinander bereitgestellt. So liefern die meisten Streaming-Sites Videos. Selbst wenn Sie es schaffen, unter zu speichern, speichern Sie nur einen Teil, nicht das gesamte Video. Es würde etwas mehr Mühe kosten, alle Stücke zu sammeln und sie mit einer speziellen Software zu nähen.
Eine andere Technik ist zu malen
<video>
auf<canvas>
. Bei dieser Technik mit etwas JavaScript sehen Sie auf der Seite ein<canvas>
Element, das Frames aus einem versteckten Bild rendert<video>
. Und weil es ein ist<canvas>
, verwendet das Kontextmenü ein<img>
Menü, kein<video>
. Sie erhalten ein Bild speichern unter anstelle eines Videos speichern unter.Sie können auch CSRF-Token zu Ihrem Vorteil verwenden. Ihr Server würde einen Token auf der Seite senden. Mit diesem Token rufen Sie dann Ihr Video ab. Ihr Server prüft, ob es sich um ein gültiges Token handelt, bevor es das Video bereitstellt, oder holt sich ein HTTP 401 . Die Idee ist, dass Sie ein Video immer nur erhalten können, wenn Sie über ein Token verfügen, das Sie nur erhalten können, wenn Sie von der Seite gekommen sind und nicht direkt die Video-URL besucht haben.
Am Ende des Tages würde ich mein Video einfach auf eine Video-Site eines Drittanbieters wie YouTube oder Vimeo hochladen. Sie verfügen über gute Videomanagement-Tools, optimieren die Wiedergabe auf dem Gerät und bemühen sich, zu verhindern, dass ihre Videos ohne großen Aufwand von Ihnen kopiert werden.
quelle
src
von der<video>
. Wenn Ihre Seite geladen wurde, hat die Datenbank das Token, die Seite das Token. Sobald<video>
der Ladevorgang beginnt (Zugriff auf den Endpunkt), überprüft der Server, ob sich das Token in der Datenbank befindet, löscht es und überträgt die Datei. Wenn das Token aufgrund des zweiten Zugriffs nicht vorhanden ist, streamen Sie die Datei nicht.Dies ist eine einfache Lösung für diejenigen, die einfach die Rechtsklick-Option "Speichern" aus den HTML5-Videos entfernen möchten
quelle
src
Attribut an und öffnen Sie es in einem anderen Tab oderwget
laden Sie es herunter!Einfache Antwort,
SIE KÖNNEN NICHT
Wenn sie Ihr Video ansehen, haben sie es bereits
quelle
Ja, Sie können dies in drei Schritten tun:
Speichern Sie eine Datei in diesem Unterverzeichnis mit dem Namen ".htaccess" und fügen Sie die folgenden Zeilen hinzu.
Jetzt ist der Quelllink nutzlos , aber wir müssen trotzdem sicherstellen, dass jedem Benutzer, der versucht, die Datei herunterzuladen, die Datei nicht direkt zugestellt werden kann.
Für eine vollständigere Lösung stellen Sie das Video jetzt mit einem Flash-Player (oder einer HTML-Zeichenfläche) bereit und verknüpfen Sie es niemals direkt mit dem Video. Fügen Sie Ihrem HTML-Code Folgendes hinzu, um das Kontextmenü zu entfernen:
Das Ergebnis:
www.foo.com/player.html spielt Videos korrekt ab , aber wenn Sie www.foo.com/videos/video.mp4 besuchen:
Dies funktioniert für direkten Download, cURL, Hotlinking, wie Sie es nennen.
Dies ist eine vollständige Antwort auf die beiden gestellten Fragen und keine Antwort auf die Frage: "Kann ich einen Benutzer daran hindern, ein bereits heruntergeladenes Video herunterzuladen?"
quelle
.htaccess
Inhalt entfernen solltenDer beste Weg, den ich normalerweise benutze, ist sehr einfach. Ich deaktiviere das Kontextmenü auf der gesamten Seite vollständig, reines HTML + Javascript:
Das ist es! Ich mache das, weil Sie die Quelle immer mit einem Rechtsklick sehen können.
Ok, Sie sagen: "Ich kann die Quelle der Browseransicht direkt verwenden" und es stimmt, aber wir gehen davon aus, dass Sie das Herunterladen von Videos NICHT beenden können
html5
.quelle
Als clientseitiger Entwickler empfehle ich die Verwendung der Blob-URL. Die Blob-URL ist eine clientseitige URL, die auf ein binäres Objekt verweist
Lassen Sie in HTML Ihr Video
src
leer und stellen Sie in JS beim Abrufen der Videodatei mit AJAX sicher, dass der Antworttyp blob istHinweis: Diese Methode wird für große Dateien nicht empfohlen
BEARBEITEN
Verwenden Sie die Ursprungsblockierung, um direktes Herunterladen zu vermeiden
Wenn das Video von einer API geliefert wird Verwenden Sie eine andere Methode (PUT / POST) anstelle von 'GET'.
quelle
PHP sendet das HTML5-Video-Tag zusammen mit einer Sitzung, in der der Schlüssel eine zufällige Zeichenfolge und der Wert der Dateiname ist.
Jetzt wird PHP gebeten, das Video zu senden. PHP stellt den Dateinamen wieder her. löscht die Sitzung und sendet das Video sofort. Außerdem müssen alle Header vom Typ "Kein Cache" und vom Typ "MIME" vorhanden sein.
Wenn der Benutzer nun die URL in einen neuen Tab kopiert oder das Kontextmenü verwendet, hat er kein Glück.
quelle
Sie können zumindest verhindern, dass technisch nicht versierte Personen das Kontextmenü mit der rechten Maustaste verwenden, um Ihr Video herunterzuladen. Sie können das Kontextmenü für jedes Element mithilfe des Attributs oncontextmenu deaktivieren.
Dies funktioniert für das Body-Element (ganze Seite) oder nur für ein einzelnes Video, das es innerhalb des Video-Tags verwendet.
quelle
Am Ende haben wir AWS CloudFront mit abgelaufenen URLs verwendet. Das Video wird geladen, aber wenn der Benutzer mit der rechten Maustaste klickt und "Speichern unter" auswählt, ist die ursprünglich empfangene Video-URL abgelaufen. Suchen Sie nach CloudFront Origin Access Identity.
Für die Erstellung der Video-URL ist ein Schlüsselpaar erforderlich, das in der AWS-CLI erstellt werden kann. Zu Ihrer Information, das ist nicht mein Code, aber es funktioniert großartig!
quelle
Wir könnten das nicht so einfach machen, indem wir das Kontextmenü wie folgt ausblenden:
quelle
+1 einfache und browserübergreifende Methode: Sie können dem Video auch ein transparentes Bild mit CSS-Z-Index und Deckkraft hinzufügen. Daher sehen Benutzer im Kontextmenü "Bild speichern unter" anstelle von "Video speichern".
quelle
Das
funktioniert nicht mehr. Chrome und Opera haben ab Juni 2018 ein Untermenü auf der Timeline, um einen direkten Download zu ermöglichen, sodass Benutzer nicht mit der rechten Maustaste klicken müssen, um das Video herunterzuladen. Interessanterweise haben Firefox und Edge das nicht ...
quelle
Verwenden eines Dienstes wie Vimeo: Melden Sie sich an
Vimeo > Goto Video > Settings > Privacy > Mark as Secured
und wählen Sie auch eingebettete Domänen aus. Sobald die eingebetteten Domänen festgelegt sind, kann niemand das Video einbetten oder über den Browser anzeigen, es sei denn, es wird eine Verbindung über die angegebenen Domänen hergestellt. Wenn Sie also eine Seite haben, die auf Ihrem Server gesichert ist und den Vimeo-Player in iframe lädt, ist es ziemlich schwierig, sich fortzubewegen.quelle
Stellen Sie zunächst fest, dass es unmöglich ist, das Herunterladen eines Videos vollständig zu verhindern. Sie können es lediglich erschweren . Dh du versteckst die Quelle des Videos.
Ein Webbrowser lädt das Video vorübergehend in einem Puffer herunter. Wenn Sie also den Download verhindern könnten, würden Sie auch verhindern, dass das Video ebenfalls angezeigt wird.
Sie sollten auch wissen, dass <1% der Gesamtbevölkerung der Welt den Quellcode verstehen können, was ihn ohnehin ziemlich sicher macht. Das bedeutet nicht, dass Sie es nicht auch in der Quelle verstecken sollten - Sie sollten es tun .
Sie sollten den Rechtsklick nicht deaktivieren und noch weniger eine Meldung mit der Aufschrift anzeigen
"You cannot save this video for copyright reasons. Sorry about that."
. Wie in dieser Antwort vorgeschlagen .Dies kann für den Benutzer sehr ärgerlich und verwirrend sein. Abgesehen davon; wenn sie JavaScript in ihrem Browser deaktivieren sie wird auf der rechten Maustaste können , und trotzdem sparen.
Hier ist ein CSS-Trick, den Sie verwenden können:
CSS kann im Browser nicht deaktiviert werden, um Ihr Video zu schützen, ohne den Rechtsklick zu deaktivieren. Ein Problem ist jedoch, dass es
controls
auch nicht aktiviert werden kann, mit anderen Worten, sie müssen eingestellt seinfalse
. Wenn Sie Ihre eigene Wiedergabe- / Pausenfunktion einbauen oder eine API verwenden möchten, deren Schaltflächen vomvideo
Tag getrennt sind, ist dies eine praktikable Option.controls
hat auch einen Download-Button, so dass die Verwendung auch keine so gute Idee ist.Hier ist ein JSFiddle- Beispiel.
Wenn Sie den Rechtsklick mit JavaScript deaktivieren möchten, speichern Sie auch die Quelle des Videos in JavaScript. Auf diese Weise wird das Video nicht geladen, wenn der Benutzer JavaScript deaktiviert (Rechtsklick zulässt) (es verbirgt auch die Videoquelle etwas besser).
Von TxRegex Antwort :
Fügen Sie nun das Video über JavaScript hinzu:
Funktionale JSFiddle
Eine andere Möglichkeit, Rechtsklicks zu verhindern, besteht in der Verwendung des
embed
Tags. Dies bietet jedoch nicht die Steuerelemente zum Ausführen des Videos, sodass sie in JavaScript implementiert werden müssten:quelle
pointer-events: none;
Nun, Sie können es nicht 100% schützen, aber Sie können es schwieriger machen. Diese Methoden, die ich erkläre, habe ich ihnen beim Studium der Schutzmethoden in begegnet PluralSight und BestDotNetTraining kennengelernt . Trotzdem hinderte mich keine dieser Methoden daran, das herunterzuladen, was ich wollte, aber es fiel mir schwer, den Downloader zu kuratieren, um seinen Schutz zu bestehen.
Zusätzlich zu anderen genannten Methoden zum Deaktivieren des Kontextmenüs. Der Benutzer kann weiterhin Tools von Drittanbietern wie InternetDownload Manager oder andere ähnliche Software zum Herunterladen der Videos verwenden. Die hier erläuterte Schutzmethode besteht darin, die Software von Drittanbietern zu verringern.
Die Anforderung all dieser Methoden besteht darin, einen Benutzer zu blockieren, wenn Sie feststellen, dass jemand Ihre Videos herunterlädt. Auf diese Weise können sie nur ein oder zwei Videos herunterladen, bevor Sie ihnen den Zugriff auf Ihre Website untersagt haben.
Haftungsausschluss
Ich übernehme keine Verantwortung, wenn jemand diese Methoden missbraucht oder sie verwendet, um anderen oder den von mir als Beispiel genannten Websites Schaden zuzufügen. Es dient nur dem Wissensaustausch, um Ihr intellektuelles Produkt zu schützen.
Links mit Ablauf generieren
Voraussetzung dafür ist, dass pro Benutzer ein Download-Link erstellt wird. dass man leicht von Azure Blob Storage oder Amazon S3 handhaben kann. Sie können einen Download-Link mit dem doppelten Zeitstempel für das Ablaufen der Videolänge erstellen. Dann müssen Sie diesen Videolink und die angeforderte Zeit erfassen. Dies ist für die nächste Methode erforderlich. Der Haken bei dieser Methode ist, dass Sie den Download-Link generieren, wenn der Benutzer auf die Wiedergabetaste klickt.
Bei einem Play-Button-Ereignis senden Sie eine Anfrage an den Server, erhalten den Link und aktualisieren die Quelle.
Drosseln Sie die Videoanforderungsrate
Anschließend überwachen Sie, wie schnell der Benutzer das zweite Video anfordert. Wenn der Benutzer einen Download-Link zu schnell anfordert, blockieren Sie ihn sofort. Sie können diesen Schwellenwert nicht zu hoch einstellen, da Sie fälschlicherweise Benutzer blockieren können, die nur die Videos durchsuchen oder durchblättern.
Aktivieren Sie den HTTP-Bereich
Verwenden Sie eine js-Bibliothek wie videojs , um Ihr Video abzuspielen. Außerdem müssen Sie einen AcceptRange in Ihrem Header zurückgeben. Der Azure-Blob-Speicher unterstützt dies sofort. Auf diese Weise beginnt der Browser, das Video Stück für Stück herunterzuladen. normalerweise 32 Byte mal 32 Byte. Dann müssen Sie sich die
timeupdate
Änderung der Videos anhören und Ihren Server über den Prozentsatz aktualisieren, in dem das Video angesehen wird. Der Prozentsatz, in dem das Video angesehen wird, darf nicht höher sein als der Prozentsatz, in dem das Video geliefert wird. Wenn Sie einen Videoinhalt bereitstellen, ohne eine prozentuale Änderung zu erhalten, können Sie den Benutzer blockieren. weil sie sicher herunterladen.Die Implementierung ist schwierig, da der Benutzer das Video vorwärts oder rückwärts überspringen kann. Seien Sie sich dessen bewusst, wenn Sie dies implementieren.
So geht BestDotnetTraining mit dem um
timeupdate
Auf jeden Fall kann der Benutzer dies umgehen, indem er eine Download-Methode verwendet, mit der eine Datei durch Streaming heruntergeladen wird. fast c # mach es sofort und für nodejs kannst du
request
module verwenden. Dann müssen Sie eine stopWatch starten, ein empfangenes Paket anhören und das empfangene Gesamtbyte mit der Gesamtgröße vergleichen. Auf diese Weise können Sie einen Prozentsatz und die Zeit berechnen, die erforderlich ist, um diesen Prozentsatz zu erhalten. Verwenden Sie dann dasThread.Sleep()
oder so etwas, um den Thread um den Betrag zu verzögern, den Sie warten müssen, wenn Sie das Video normal ansehen. Auch vor dem Ruhezustand kann der Benutzer den Server anrufen und den empfangenen Prozentsatz aktualisieren. Der Server glaubt also, dass der Benutzer tatsächlich ein Video ansieht.Die Berechnung sieht ungefähr so aus. Wenn Sie beispielsweise berechnen, dass Sie bisher 1 Prozent erhalten haben, können Sie den Betrag berechnen, den Sie warten sollten, um den Download-Thread zu beenden. Auf diese Weise können Sie ein Video nicht schneller als die tatsächliche Länge herunterladen. wenn ein Video 24 min ist. Das Herunterladen dauert 24 Minuten. (plus den Schwellenwert, den wir in die erste Methode gesetzt haben)
Überprüfen Sie den Browser-Agenten
Wenn Sie eine Webseite und den Videolink bereitstellen oder die Anforderung zur Fortschrittsaktualisierung annehmen, können Sie sich den Browser-Agenten ansehen. Wenn es anders ist, verbieten Sie den Benutzer.
Beachten Sie jedoch, dass einige alte Browser diese Informationen nicht weitergeben. Daher sollten Sie dies ignorieren, wenn sowohl in der Videoanforderung als auch in der Webseitenanforderung kein Browser-Agent vorhanden ist. Wenn eine Anfrage dies hat und eine andere nicht, sollten Sie den Benutzer sperren.
Um dies zu umgehen, kann der Benutzer den Browser-Agent-Header manuell auf den kopflosen Browser einstellen, mit dem er den Download-Link erfasst.
Überprüfen Sie den Referer-Header
Wenn der Referer etwas anderes als Ihre Host-URL oder die Seiten-URL ist, die Sie für das Video bereitstellen, können Sie den Benutzer sperren, da er den Download-Link in einen anderen Tab oder eine andere Anwendung einfügt. Sogar Sie können dies für die Fortschrittsaktualisierungsanforderung tun.
Voraussetzung dafür ist eine Zuordnung des Videos und der Seite, auf der das Video angezeigt wird. Sie können eine Konvention oder ein Muster erstellen, um zu verstehen, wie die URL lauten soll. Es liegt an Ihrem Design.
Um dies zu umgehen, kann der Benutzer den Referrer-Header beim Herunterladen der Videos manuell auf die URL der Download-Seite setzen.
Berechnen Sie die Zeit zwischen den Anforderungen
Wenn Sie so viele Anfragen erhalten, dass die Zeit zwischen ihnen gleich ist, sollten Sie den Benutzer blockieren. Sie sollten dies eingeben, um zu erfassen, wie viel Zeit zwischen der Anforderung zur Generierung von Videolinks liegt. Wenn sie gleich sind (plus / minus eines bestimmten Schwellenwerts) und dies mehr als mehrmals vorkommt, können Sie den Benutzer sperren. Denn wenn es einen Bot gibt, der Ihre Website oder Videos crawlt, haben sie normalerweise die gleiche Ruhezeit zwischen ihren Anfragen. Wenn Sie also jede Anfrage erhalten, zum Beispiel alle 1,3 Minuten (plus / min Abweichung). dann lösen Sie einen Alarm aus. Zu diesem Zweck können Sie eine statistische Berechnung verwenden, um die Abweichung zwischen den Anforderungen zu ermitteln.
Um dies zu umgehen, kann der Benutzer eine zufällige Ruhezeit zwischen die Anforderungen setzen.
Beispielcode
Ich habe einen Repo PluralSight-Downloader , der es auf halbem Weg macht. Ich habe dieses Repo vor fast 5 Jahren erstellt. Da ich es nur zu Studienzwecken und für den persönlichen Gebrauch geschrieben habe, hat das Repo bisher kein Update erhalten und ich werde es nicht aktualisieren oder die Arbeit vereinfachen. Es ist nur ein Beispiel dafür, wie es gemacht werden kann.
quelle
Sie können verwenden
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/controlsList
Es verhindert nicht das Speichern des Videos, entfernt jedoch die Download-Schaltfläche und die Option "Speichern unter" im Kontextmenü.
quelle
Kurze Antwort: Verschlüsseln Sie den Link wie bei YouTube. Sie wissen nicht, wie, und fragen Sie YouTube / Google, wie sie es tun. (Nur für den Fall, dass Sie direkt auf den Punkt kommen möchten.)
Ich möchte jeden darauf hinweisen, dass dies möglich ist, weil YouTube es tut und wenn sie es können, jede andere Website und es auch nicht vom Browser stammt, weil ich es auf einigen Browsern wie Microsoft Edge und Internet Explorer und getestet habe Es gibt also eine Möglichkeit, es zu deaktivieren und zu sehen, dass die Leute es immer noch sagen ... Ich versuche, nach einer Antwort zu suchen, denn wenn YouTube dies kann, muss es einen Weg geben, und der einzige Weg, um zu sehen, wie sie es tun, ist, wenn jemand nachschaut die Skripte von Youtube, die ich jetzt mache. Ich habe auch überprüft, ob es sich auch um ein benutzerdefiniertes Kontextmenü handelt, und das liegt nicht daran, dass das Kontextmenü das Inspect-Element überflutet, und ich meine, es ist darüber und ich habe nachgesehen und es wird nie eine neue Klasse erstellt und auch nicht Es ist unmöglich, mit Javascript auf das Inspect-Element zuzugreifen, also kann es nicht sein. Wenn Sie mit der rechten Maustaste auf ein YouTube-Video doppelklicken, können Sie feststellen, dass das Kontextmenü für Chrome angezeigt wird. Außerdem ... würde YouTube diese Funktion nicht hinzufügen. Ich recherchiere und schaue mir die Quelle von YouTube an, also werde ich zurück sein, wenn ich die Antwort finde ... wenn jemand sagt, dass du es nicht kannst, dann haben sie es nicht getan. Ich recherchiere nicht so wie ich. Der einzige Weg, um YouTube-Videos herunterzuladen, ist ein Video-Download.
Okay ... Ich habe recherchiert und meine Recherche bleibt, dass Sie es deaktivieren können, außer es gibt kein Javascript ... Sie müssen in der Lage sein, die Links zum Video zu verschlüsseln, damit Sie es deaktivieren können, weil ich denke, dass es welche gibt Der Browser zeigt es nicht an, wenn er es nicht finden kann. Als ich einen YouTube-Videolink öffnete, wurde er als "Blob" angezeigt. https://www.youtube.com/e5c4808e-297e-451f-80da-3e838caa1275"Ohne Anführungszeichen verschlüsselt es es, damit es nicht gespeichert werden kann ... Sie müssen PHP dafür kennen, aber wie die Antwort, die Sie ausgewählt haben, um es schwieriger zu machen, macht YouTube es am schwierigsten, es zu verschlüsseln. Sie müssen ein Voraus PHP-Programmierer, aber wenn Sie das nicht wissen, dann nehmen Sie die Person, die Sie ausgewählt haben, als beste Antwort, um das Herunterladen zu erschweren ... aber wenn Sie PHP als schwer kennen, verschlüsseln Sie den Videolink so, dass er nur weitergelesen werden kann deine ... Ich weiß nicht, wie ich es erklären soll, aber sie haben es getan und es gibt einen Weg. Die Art und Weise, wie YouTube Videos verschlüsselt, ist ziemlich klug. Wenn du also wissen willst, wie es geht, frag einfach YouTube / Google, wie Sie tun es ... ich hoffe, dies hilft Ihnen, obwohl Sie bereits die beste Antwort ausgewählt haben. Daher ist die Verschlüsselung des Links kurzfristig am besten.
quelle
Es scheint, als ob das Streamen des Videos über den Websocket eine praktikable Option ist, da beim Streamen der Frames und Zeichnen auf einer Leinwand eine Art Sache.
Video-Streaming über Websockets mit JavaScript
Ich denke, dies würde eine weitere Schutzstufe bieten, die es dem Kunden erschwert, das Video zu erfassen und natürlich Ihr Problem mit der Kontextmenüoption "Video speichern unter ..." zu lösen (Overkill ?!).
quelle
Folgendes habe ich getan:
quelle
@ Clayton-Graul hatte das, wonach ich suchte, außer dass ich die CoffeeScript-Version für eine Site mit AngularJS benötigte. Nur für den Fall, dass Sie das auch brauchen, haben Sie Folgendes in den betreffenden AngularJS-Controller eingegeben:
"Am Kreis k sind seltsame Dinge im Gange" (es ist wahr)
quelle