Ответ 1
Да, вы можете отключить SCE, но это не приведет к тому, что ваши строки будут интерполированы в HTML
Использование сценария:
$scope.movie = {title:"<h1>Egghead.io AngularJS, Binding</h1>",
src:"http://www.youtube.com/embed/Lx7ycjC8qjE"};
и непосредственно интерполировать заголовок без использования ng-bind-html="movie.title"
<p>{{movie.title}}</p>
произведет это
<h1>Egghead.io AngularJS Binding</h1>
Прямая интерполяция кажется дезинфицированной, но на самом деле она не скомпилирована.
Интерполированная строка с HTML рассматривается как строка, если она не скомпилирована в директиве.
Другие фреймворки, как правило, "основаны на строках" (они напрямую передают браузер), тогда как AngularJS является "DOM based", он компилирует ваш HTML и управляет им агрессивно с областями и часами. Мартин Фаулер ссылается на это как Template Просмотр vs Transform View.
HTML может быть скомпилирован в директивах, но может быть интерполирован только в разметке и контроллерах
Я создал 2 Plunkers, пытающихся получить доступ к "небезопасному URL", что означает, что я интерполировал URL-адрес в ng-src
без использования $sce.trustAs
Иллюстрация 1: Plunker 1 SCE отключен во время конфигурации
Разметка интерполирует "небезопасный URL":
<p>{{movie.title}}</p>
<iframe class="youtube-player" type="text/html" width="640" height="385" ng-src="{{movie.src}}" allowfullscreen frameborder="0">
</iframe>
Приложение отключает $sceProvider
var app = angular.module('plunker', ['ngSanitize']);
app.config(['$sceProvider',function($sceProvider){
$sceProvider.enabled(false);
}]);
app.controller('MainCtrl', function($scope, $sce) {
$scope.movie = {src:"http://www.youtube.com/embed/Lx7ycjC8qjE", title:"Egghead.io AngularJS Binding"};
});
"Небезопасный" URL-адрес интерполируется без ошибок. Отобразится видео.
Иллюстрация 2: Plunker 2 app.config
прокомментировал, ergo, используя настройки SCE по умолчанию
var app = angular.module('plunker', ['ngSanitize']);
//app.config(['$sceProvider',function($sceProvider){
// $sceProvider.enabled(false);
//}]);
app.controller('MainCtrl', function($scope, $sce) {
$scope.movie = {src:"http://www.youtube.com/embed/Lx7ycjC8qjE", title:"Egghead.io AngularJS Binding"};
});
Ошибка:
Ошибка: [$ интерполяция: interr] Невозможно интерполировать: {{movie.src}} Ошибка: [$ sce: insecurl] Заблокированный ресурс загрузки из URL-адреса, который не разрешен $sceDelegate. URL: http://www.youtube.com/embed/Lx7ycjC8qjE