uib-popover-html akzeptiert meine HTML-Zeichenfolge nicht

8

Ich benutze die Versionen 0.14.2 von angular-ui-bootstrap. Ich konnte im Popover keine Zeilenumbrüche anzeigen. Ich benutze die popover-html-Anweisung und eine Zeichenfolge wie

%Vor%

Es gibt den folgenden Fehler:

%Vor%

Ich habe versucht, meine Zeichenfolge in einen $ sce.trustAsHtml-Aufruf zu schreiben, aber es hat nichts geändert.

Hier ist ein Plünderer Ссылка

    
Yugo Amaryl 23.10.2015, 07:57
quelle

2 Antworten

18

Funktioniert für mich mit $sce.trustAsHtml wie unten.

Hinweis: trustAsHtml teilt Angular mit, dass der HTML-Code sicher ist. Daher sollte es nur verwendet werden, wenn Sie dem HTML vertrauen, d. h. es wird nicht vom Benutzer bereitgestellt.

JS:

%Vor%

HTML:

%Vor%

Aktualisierter Plunker

Oder wenn Ihr Inhalt dynamisch ist und Sie eine Funktion benötigen:

JS:

%Vor%

HTML:

%Vor%

Plunker

(Der Grund für die Zwischenspeicherung des von trustAsHtml zurückgegebenen Werts ist, dass trustAsHtml immer ein neues Objekt zurückgibt, was zu einer unendlichen $ digest-Schleife führen kann)

    
sheilak 24.10.2015, 14:14
quelle
3

Der akzeptierte Ansatz kann leicht zu einer Cross-Site-Scripting-Schwachstelle in Ihrer Anwendung führen. Sie sollten $sce.trustAsHtml wirklich nur verwenden, wenn Sie explizit dem Inhalt vertrauen, den Sie anzeigen möchten. Die angular-bootstrap-Dokumentation weist auch darauf hin:

  

Der Benutzer ist dafür verantwortlich, dass der Inhalt sicher in das DOM eingefügt werden kann!

Ein alternativer und sicherer Ansatz besteht darin, uib-popover-template mit einer einfachen Vorlage in Kombination mit ng-bind-html zu verwenden, die automatisch $sanitize verwendet, um den HTML-Code zu bereinigen.

HTML

%Vor%

JS

%Vor%

Sie müssen außerdem ngSanitize in Ihrer App deklarieren und das Skript angular-sanitize.js einbeziehen. Bitte werfen Sie einen Blick auf den aktualisierten Plocker als Referenz.

aktualisierter Plunker

    
Lucas Bader 26.07.2016 09:20
quelle