我收到了这段代码
<div *ngIf="topic.video">
<div class="video-container">
<iframe width="300" height="169" src="topic.video.url" style="border:0"></iframe>
</div>
</div>
问题:angular会输出src="localhost://8001"
而不是src="https://www.youtube.com/embed/hr4BbdUiTUM"
这里可能有什么问题?
更新2
这是Gunter的回答之后的事。
import { Component, OnInit, Pipe, Sanitizer } from '@angular/core';
import { DataService } from '../../shared/data';
@Component({
template: `
<div class="subheader">Feed</div>
<div *ngFor="let topic of topics; let index = index; trackBy: trackByFn">
<div *ngIf="topic.type == 'discussion'">
<div *ngIf="topic.video">
<div class="video-container">
<iframe src="{{sanitizer.bypassSecurityTrustResourceUrl(topic.video.url)}}" ></iframe>
</div>
</div>
</div>
</div>
`
})
export class CompanyComponent implements OnInit {
constructor(
private sanitizer:Sanitizer,
private dataService: DataService
) {}
ngOnInit() {
this.topics = this.dataService.topics;
}
}
我仍然有这个错误
company.ts?ac6a:121 Error: Uncaught (in promise): Error: Error in ./CompanyComponent class CompanyComponent - inline template:29:41 caused by: unsafe value used in a resource URL context (see http://g.co/ng/security#xss)
Error: unsafe value used in a resource URL context (see
答案 0 :(得分:4)
如果您想从变量中获取网址,则需要使用[]
或{{}}
启用绑定(同时从不同时使用,{{}}
仅适用于字符串,而不是对象或数组):
[src]="topic.video.url"
或
src="{{topic.video.url}}"
如果DOM清理程序删除了URL,您可以使用In RC.1 some styles can't be added using binding syntax
中显示的管道import { Pipe, DomSanitizer } from '@angular/core';
@Pipe({name: 'safeResourceUrl'})
export class SafeResourceUrl {
constructor(private sanitizer:DomSanitizer){}
transform(url) {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
[src]="topic.video.url | safeResourceUrl"
您也可以申请
this.myUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.topic.video.url);
并绑定到此
[src]="myUrl"
但管道更可重复使用。