Я пытаюсь использовать $sanitize
провайдера и ng-bind-htm-unsafe
директиву, чтобы позволить моему контроллеру вводить HTML в DIV.
Тем не менее, я не могу заставить его работать.
<div ng-bind-html-unsafe="{{preview_data.preview.embed.html}}"></div>
Я обнаружил, что это потому, что он был удален из AngularJS (спасибо).
Но без ng-bind-html-unsafe
, я получаю эту ошибку:
Ответы:
ngSanitize
модуль,app
например:var app = angular.module('myApp', ['ngSanitize']);
ng-bind-html
оригинальнымhtml
контентом. Не нужно ничего делать в вашем контроллере. Разбор и преобразование автоматически выполняетсяngBindHtml
директивой. (Прочтите этотHow does it work
раздел: $ sce ). Таким образом, в вашем случае<div ng-bind-html="preview_data.preview.embed.html"></div>
будет делать работу.источник
Вместо того чтобы объявлять функцию в своей области, как предлагает Алекс, вы можете преобразовать ее в простой фильтр:
Тогда вы можете использовать это так:
И вот рабочий пример: http://jsfiddle.net/leeroy/6j4Lg/1/
источник
<td ng-bind-html="representative.primary | to_trusted"></td>
Вы указали, что используете Angular 1.2.0 ..., поскольку один из других указанных комментариев
ng-bind-html-unsafe
устарел.Вместо этого вы захотите сделать что-то вроде этого:
В вашем контроллере внедрите
$sce
службу и пометьте HTML как «доверенный»:Обратите внимание, что вы захотите использовать 1.2.0-rc3 или новее. (Они исправили ошибку в rc3, из-за которой «наблюдатели» не могли корректно работать с доверенным HTML.)
источник
myApp.controller('myCtrl', ['$scope', '$sce', function($scope, $sce) {
ngSanitize
ниже ( stackoverflow.com/a/25679834/22227 ) для альтернативного, более безопасного решения.trustAsHtml
делает то, что говорит, он доверяет любому входящему html-коду, что может привести к атакам межсайтового скриптинга (XSS)Для меня самое простое и гибкое решение:
И добавьте функцию в свой контроллер:
Не забудьте добавить
$sce
к инициализации вашего контроллера.источник
На мой взгляд, лучшее решение этого:
Создайте пользовательский фильтр, который может быть, например, в файле common.module.js, который будет использоваться в вашем приложении:
Использование:
Теперь - я не понимаю, почему директива
ng-bind-html
неtrustAsHtml
является частью ее функции - мне кажется немного глупым, что она не делаетВо всяком случае - так я и делаю - в 67% случаев это работает всегда.
источник
Вы можете создать свою собственную простую небезопасную привязку html, конечно, если вы используете ввод пользователя, это может быть угрозой безопасности.
источник
$sce.trustAsHtml
?Вам не нужно использовать {{}} внутри ng-bind-html-unsafe:
Вот пример: http://plnkr.co/edit/R7JmGIo4xcJoBc1v4iki?p=preview
Оператор {{}} по сути является просто сокращением для ng-bind, поэтому то, что вы пытались сделать, равнозначно привязке внутри привязки, которая не работает.
источник
{{}}
Оператор вызывает мой вопрос с обязательным упущением, спасибо за подсказку!У меня была похожая проблема. Все еще не могу получить контент из моих файлов уценки, размещенных на github.
После настройки белого списка (с добавленным доменом github) для $ sceDelegateProvider в app.js он работал как чудо.
Описание: использование белого списка вместо переноса в список доверенных, если вы загружаете контент из других URL-адресов.
Документы: $ sceDelegateProvider и ngInclude (для извлечения, компиляции и включения внешнего HTML-фрагмента)
источник
Строгое контекстуальное экранирование может быть полностью отключено, что позволяет вводить html с помощью
ng-html-bind
. Это небезопасный вариант, но полезный при тестировании.Пример из документации AngularJS по
$sce
:Присоединение приведенного выше раздела конфигурации к вашему приложению позволит вам добавить html
ng-html-bind
, но, как отмечает документ:источник
Вы можете использовать фильтр, как это
использование
он может использоваться для других типов ресурсов, например, ссылки на источник для iframes и других типов, объявленных здесь
источник