Ich versuche, den $sanitize
Anbieter und die ng-bind-htm-unsafe
Direktive zu verwenden, damit mein Controller HTML in ein DIV einfügen kann.
Ich kann es jedoch nicht zum Laufen bringen.
<div ng-bind-html-unsafe="{{preview_data.preview.embed.html}}"></div>
Ich habe festgestellt, dass es daran liegt, dass es aus AngularJS entfernt wurde (danke).
Aber ohne ng-bind-html-unsafe
bekomme ich diesen Fehler:
Antworten:
ngSanitize
Modul in Ihrapp
Beispiel aufnehmen:var app = angular.module('myApp', ['ngSanitize']);
ng-bind-html
dem ursprünglichenhtml
Inhalt binden . Sie müssen nichts anderes in Ihrem Controller tun. Das Parsen und Konvertieren erfolgt automatisch durch diengBindHtml
Direktive. (Lesen Sie dazu denHow does it work
Abschnitt: $ sce ). Also, in deinem Fall<div ng-bind-html="preview_data.preview.embed.html"></div>
würde die Arbeit machen.quelle
Anstatt eine Funktion in Ihrem Bereich zu deklarieren, wie von Alex vorgeschlagen, können Sie sie in einen einfachen Filter konvertieren:
Dann können Sie es so verwenden:
Und hier ist ein funktionierendes Beispiel: http://jsfiddle.net/leeroy/6j4Lg/1/
quelle
<td ng-bind-html="representative.primary | to_trusted"></td>
Sie haben angegeben, dass Sie Angular 1.2.0 verwenden ... da einer der anderen angegebenen Kommentare
ng-bind-html-unsafe
veraltet ist.Stattdessen möchten Sie Folgendes tun:
Fügen Sie in Ihren Controller den
$sce
Dienst ein und markieren Sie den HTML-Code als "vertrauenswürdig":Beachten Sie, dass Sie 1.2.0-rc3 oder neuer verwenden möchten. (Sie haben einen Fehler in rc3 behoben, der "Beobachter" daran hinderte, ordnungsgemäß mit vertrauenswürdigem HTML zu arbeiten.)
quelle
myApp.controller('myCtrl', ['$scope', '$sce', function($scope, $sce) {
ngSanitize
unten vorgeschlagenen Antwort ( stackoverflow.com/a/25679834/22227 ).trustAsHtml
tut, was es sagt, es vertraut jedem eingehenden HTML-Code, der zu Cross-Site Scripting (XSS) -Angriffen führen kannFür mich ist die einfachste und flexibelste Lösung:
Und fügen Sie Ihrem Controller eine Funktion hinzu:
Vergessen Sie nicht,
$sce
die Initialisierung Ihres Controllers zu ergänzen .quelle
Die beste Lösung dafür ist meiner Meinung nach:
Erstellen Sie einen benutzerdefinierten Filter, der sich beispielsweise in einer Datei common.module.js befinden kann und in Ihrer gesamten App verwendet wird:
Verwendungszweck:
Nun - ich verstehe nicht, warum die Richtlinie
ng-bind-html
nichttrustAsHtml
Teil ihrer Funktion ist - scheint mir ein bisschen dumm, dass dies nicht der Fall istWie auch immer - so mache ich das - 67% der Zeit funktioniert es immer.
quelle
Sie können Ihre eigene einfache unsichere HTML-Bindung erstellen. Wenn Sie Benutzereingaben verwenden, kann dies natürlich ein Sicherheitsrisiko darstellen.
quelle
$sce.trustAsHtml
?Sie müssen {{}} nicht in ng-bind-html-unsafe verwenden:
Hier ist ein Beispiel: http://plnkr.co/edit/R7JmGIo4xcJoBc1v4iki?p=preview
Der Operator {{}} ist im Wesentlichen nur eine Abkürzung für ng-bind. Was Sie also versucht haben, entspricht einer Bindung innerhalb einer Bindung, die nicht funktioniert.
quelle
{{}}
Operator hat mein Problem mit fehlgeschlagener Bindung verursacht, danke für den Hinweis!Ich hatte ein ähnliches Problem. Ich konnte immer noch keinen Inhalt von meinen auf github gehosteten Markdown-Dateien erhalten.
Nach dem Einrichten einer Whitelist (mit hinzugefügter Github-Domain) für den $ sceDelegateProvider in app.js funktionierte dies wie ein Zauber.
Beschreibung: Verwenden Sie eine Whitelist, anstatt sie als vertrauenswürdig zu verpacken, wenn Sie Inhalte von einer anderen URL laden.
Docs: $ sceDelegateProvider und ngInclude (zum Abrufen, Kompilieren und Einschließen eines externen HTML-Fragments)
quelle
Strict Contextual Escaping kann vollständig deaktiviert werden, sodass Sie HTML mit injizieren können
ng-html-bind
. Dies ist eine unsichere Option, aber beim Testen hilfreich.Beispiel aus der AngularJS-Dokumentation zu
$sce
:Wenn Sie den obigen Konfigurationsabschnitt an Ihre App anhängen, können Sie HTML einfügen
ng-html-bind
, aber wie im Dokument erwähnt:quelle
Sie können einen solchen Filter verwenden
Verwendung
Es kann für andere Ressourcentypen verwendet werden, z. B. für den Quelllink für Iframes und andere hier deklarierte Typen
quelle