J'essaie d'utiliser le $sanitize
fournisseur et la ng-bind-htm-unsafe
directive pour permettre à mon contrôleur d'injecter du HTML dans un DIV.
Cependant, je ne peux pas le faire fonctionner.
<div ng-bind-html-unsafe="{{preview_data.preview.embed.html}}"></div>
J'ai découvert que c'est parce qu'il a été supprimé d'AngularJS (merci).
Mais sans ng-bind-html-unsafe
, j'obtiens cette erreur:
Réponses:
ngSanitize
module sur votreapp
exemple:var app = angular.module('myApp', ['ngSanitize']);
ng-bind-html
originalhtml
. Pas besoin de faire autre chose dans votre manette. L'analyse et la conversion sont effectuées automatiquement par langBindHtml
directive. (Lisez laHow does it work
section à ce sujet: $ sce ). Donc, dans votre cas,<div ng-bind-html="preview_data.preview.embed.html"></div>
ferait le travail.la source
Au lieu de déclarer une fonction dans votre portée, comme suggéré par Alex, vous pouvez la convertir en un simple filtre:
Ensuite, vous pouvez l'utiliser comme ceci:
Et voici un exemple de travail: http://jsfiddle.net/leeroy/6j4Lg/1/
la source
<td ng-bind-html="representative.primary | to_trusted"></td>
Vous avez indiqué que vous utilisez Angular 1.2.0 ... car l'un des autres commentaires indiqués
ng-bind-html-unsafe
est obsolète.Au lieu de cela, vous voudrez faire quelque chose comme ceci:
Dans votre contrôleur, injectez le
$sce
service et marquez le code HTML comme "approuvé":Notez que vous souhaiterez utiliser 1.2.0-rc3 ou une version plus récente. (Ils ont corrigé un bogue dans rc3 qui empêchait les "observateurs" de fonctionner correctement sur du HTML de confiance.)
la source
myApp.controller('myCtrl', ['$scope', '$sce', function($scope, $sce) {
ngSanitize
ci-dessous ( stackoverflow.com/a/25679834/22227 ) pour une solution alternative plus sûre.trustAsHtml
fait ce qu'il dit, il fait confiance à tout code html entrant, ce qui peut entraîner des attaques Cross-Site Scripting (XSS)Pour moi, la solution la plus simple et la plus flexible est:
Et ajoutez une fonction à votre contrôleur:
N'oubliez pas d'ajouter
$sce
à l'initialisation de votre contrôleur.la source
À mon avis, la meilleure solution est la suivante:
Créez un filtre personnalisé qui peut être dans un fichier common.module.js par exemple - utilisé dans toute votre application:
Usage:
Maintenant - je ne vois pas pourquoi la directive
ng-bind-html
ne fait pastrustAsHtml
partie de sa fonction - me semble un peu stupide qu'elle ne le fasse pasQuoi qu'il en soit - c'est comme ça que je le fais - 67% du temps, ça marche toujours.
la source
Vous pouvez créer votre propre liaison HTML non sécurisée simple, bien sûr, si vous utilisez l'entrée utilisateur, cela pourrait constituer un risque pour la sécurité.
la source
$sce.trustAsHtml
?Vous n'avez pas besoin d'utiliser {{}} dans ng-bind-html-unsafe:
Voici un exemple: http://plnkr.co/edit/R7JmGIo4xcJoBc1v4iki?p=preview
L'opérateur {{}} est essentiellement un raccourci pour ng-bind, donc ce que vous essayiez équivaut à une liaison à l'intérieur d'une liaison, ce qui ne fonctionne pas.
la source
{{}}
opérateur était à l'origine de mon problème d'échec de la liaison, merci pour l'astuce!J'ai eu un problème similaire. Je n'ai toujours pas pu obtenir le contenu de mes fichiers de démarques hébergés sur github.
Après avoir configuré une liste blanche (avec un domaine github ajouté) pour $ sceDelegateProvider dans app.js, cela a fonctionné comme un charme.
Description: utiliser une liste blanche au lieu de l'habiller comme approuvé si vous chargez du contenu à partir d'une URL différente.
Documents: $ sceDelegateProvider et ngInclude (pour récupérer, compiler et inclure un fragment HTML externe)
la source
L'échappement contextuel strict peut être entièrement désactivé, ce qui vous permet d'injecter du HTML à l'aide de
ng-html-bind
. Il s'agit d'une option dangereuse, mais utile lors des tests.Exemple de la documentation AngularJS sur
$sce
:Attacher la section de configuration ci-dessus à votre application vous permettra d'injecter du HTML
ng-html-bind
, mais comme le remarque le doc:la source
Vous pouvez utiliser un filtre comme celui-ci
usage
il peut être utilisé pour d'autres types de ressources, par exemple le lien source pour les iframes et autres types déclarés ici
la source