Ответ 1
Если вы включаете angular-sanitize
script, входы дезинфицируются путем разбора HTML в токены. Все безопасные маркеры (из белого списка) затем сериализуются обратно в правильно экранированную строку html. Это означает, что никакой небезопасный ввод не может попасть в возвращаемую строку.
Я включил небольшой пример ниже, вдохновленный этим сообщением . Если вы запустите этот script с помощью var app = angular.module("app", ["ngSanitize"]);
, ссылки html отображаются правильно. Однако, если вы прокомментируете это утверждение и раскомментируете var app = angular.module("app", []);
, появится следующее сообщение об ошибке: Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context.
<!DOCTYPE html>
<html>
<head>
<link rel="icon" type="image/x-icon" href="favicon.ico">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-sanitize.min.js"></script>
<!-- BEGIN disable refresh -->
<script type="text/javascript">
//Including ngSanitize ensures html links get properly sanitized
var app = angular.module("app", ["ngSanitize"]);
//If you use this code instead no html links get displayed
//var app = angular.module("app", []);
app.controller("mainController", function($scope) {
var main = this;
main.links = [
"<a href='http://google.com'>Google</a>",
"<a href='http://odetocode.com'>OdeToCode</a>",
"<a href='http://twitter.com'>Twitter</a>"
];
});
</script>
</head>
<body ng-app="app">
<section ng-controller="mainController as main">
<nav>
<ul>
<li ng-repeat="link in main.links" ng-bind-html="link">
</li>
</ul>
</nav>
</section>
</body>
</html>