angular - 如何设置 <iframe src ="..."> 而不会导致 `unsafe value` 异常?

标签 angular

我正在编写一个涉及设置 iframe src 属性的教程:

<iframe width="100%" height="300" src="{{video.url}}"></iframe>

这会引发异常:

Error: unsafe value used in a resource URL context
at DomSanitizationServiceImpl.sanitize...

我已经尝试使用 [src] 的绑定(bind),但没有成功。

最佳答案

更新 v8

以下答案有效,但 exposes your application to XSS security risks! . 建议不要使用 this.domSanitizer.bypassSecurityTrustResourceUrl(url),而是使用 this.domSanitizer.sanitize(SecurityContext.URL, url)

更新

RC.6^ 版本使用DomSanitizer

Plunker

一个不错的选择是为此使用纯管道:

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer} from '@angular/platform-browser';

@Pipe({ name: 'safe' })
export class SafePipe implements PipeTransform {
  constructor(private domSanitizer: DomSanitizer) {}
  transform(url) {
    return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
  }
} 

记得将新的 SafePipe 添加到 AppModule 的 declarations 数组中。 ( as seen on documentation )

@NgModule({
   declarations : [
     ...
     SafePipe
   ],
})

html

<iframe width="100%" height="300" [src]="url | safe"></iframe>

Plunker

如果您使用 embed 标签,您可能会感兴趣:


旧版本 RC.5

您可以像这样利用 DomSanitizationService:

export class YourComponent {
  url: SafeResourceUrl;
  constructor(domSanitizationService: DomSanitizationService) {
    this.url = domSanitizer.bypassSecurityTrustResourceUrl('your url');
  }
}

然后绑定(bind)到模板中的 url:

<iframe width="100%" height="300" [src]="url"></iframe>

不要忘记添加以下导入:

import { SafeResourceUrl, DomSanitizationService } from '@angular/platform-browser';

Plunker sample

关于angular - 如何设置 &lt;iframe src ="..."> 而不会导致 `unsafe value` 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037760/

相关文章:

angular - 将 Angular 响应式 FormControl 传递给子组件

javascript - 当我点击 Angular 中的 <li> 时,如何更改背景颜色?

angular - 使用Angular 4 Application从docker中的沙发数据库数据库中获取数据

angular - 使用Rxjs映射函数时如何保留对象属性大小写

javascript - 如何将具有平滑动画的scrollIntoView转换为Promise?

php - 如何在 Laravel 中检索 FormData

node.js - Angular 4 : Error on local build of github project that was previously working

angular - Angular 6 react 形式的两种方式绑定(bind)

Angular cli : getting it ready for production

javascript - distinctUntilChanged() 在 Angular 6 中没有按预期工作