После обновления до последней версии-кандидата Angular 2 мои img
теги:
<img class='photo-img' [hidden]="!showPhoto1" src='{{theMediaItem.photoURL1}}'>
выдают ошибку браузера:
ОРИГИНАЛЬНОЕ ИСКЛЮЧЕНИЕ: Ошибка: небезопасное значение, используемое в контексте URL ресурса
Значение URL-адреса:
http://veeu-images.s3.amazonaws.com/media/userphotos/116_1464645173408_cdv_photo_007.jpg
РЕДАКТИРОВАТЬ:
Я пробовал предложение, сделанное в другом решении, что этот вопрос должен быть дубликатом, но я получаю ту же ошибку.
Я добавил в контроллер следующий код:
import {DomSanitizationService} from '@angular/platform-browser';
@Component({
templateUrl: 'build/pages/veeu/veeu.html'
})
export class VeeUPage {
static get parameters() {
return [[NavController], [App], [MenuController], [DomSanitizationService]];
}
constructor(nav, app, menu, sanitizer) {
this.app = app;
this.nav = nav;
this.menu = menu;
this.sanitizer = sanitizer;
this.theMediaItem.photoURL1 = this.sanitizer.bypassSecurityTrustUrl(this.mediaItems[1].url);
}
Я все еще получаю то же сообщение об ошибке.
РЕДАКТИРОВАТЬ2:
Я также изменил html на:
<img class='photo-img' [hidden]="!showPhoto1" [src]='theMediaItem.photoURL1'>
Я все еще получаю то же сообщение об ошибке
[src]='theMediaItem.photoURL1'
Ответы:
Я использую rc.4, и этот метод работает для ES2015 (ES6):
В HTML:
Использование функции гарантирует, что значение не изменится после его дезинфекции. Также имейте в виду, что используемая вами функция очистки зависит от контекста.
Для изображений это
bypassSecurityTrustUrl
будет работать, но для других целей вам необходимо обратиться к документации :https://angular.io/docs/ts/latest/api/platform-browser/index/DomSanitizer-class.html
источник
import {DomSanitizer} from '@angular/platform-browser';
2.4.x
например, но теги github будут ссылаться на кандидатов на выпуск, например2.0.0-rc3
. И я вижу в rc3 , например, класс все еще был названDomSanitizationService
.this.sanitizer.bypassSecurityTrustResourceUrl(url)
для видеоТруба
Шаблон
Это оно!
Примечание: вам это не нужно, но вот компонентное использование трубыисточник
Самый элегантный способ исправить это: использовать pipe. Вот пример (мой блог). Таким образом, вы можете просто использовать
url | safe
pipe для обхода защиты.Подробности см. В документации по npm: https://www.npmjs.com/package/safe-pipe
источник
Используйте Safe Pipe, чтобы исправить это.
Создайте безопасную трубу, если у вас ее нет.
ng gc безопасный для труб
добавить Safe pipe в app.module.ts
объявления: [SafePipe]
объявить безопасную трубу в вашем ТС
Импортируйте Dom Sanitizer и Safe Pipe для безопасного доступа к URL
- Добавить сейф с URL-адресом src
источник
Либо вы можете предоставить дезинфицирующее средство для представления, либо предоставить метод, который перенаправляет вызов в bypassSecurityTrustUrl
источник
Angular по умолчанию считает все значения ненадежными. Когда значение вставляется в DOM из шаблона через свойство, атрибут, стиль, привязку класса или интерполяцию, Angular очищает и избегает ненадежных значений.
Поэтому, если вы напрямую манипулируете DOM и вставляете в него контент, вам необходимо очистить его, иначе Angular выдаст ошибки.
Я создал канал SanitizeUrlPipe для этого
и вот как вы можете использовать
Если вы хотите добавить HTML, то SanitizeHtmlPipe может помочь
Подробнее о безопасности angular читайте здесь .
источник
источник
источник
Чтобы избежать
unsafe url
ошибки, можно установить изображение как фоновое :CSS:
источник