2016-06-26 8 views
84

Ich bin neu in Angular 2 ohne AngularJS Erfahrung und arbeitet an einem Tutorial die Einstellung eines iframe src-Attribut beteiligt: ​​Wie setze ich iframe src in Angular 2, ohne eine `unsafe value` Ausnahme zu verursachen?

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

Dies löst eine Ausnahme:

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

Ich habe bereits versucht, Bindungen mit mit [src] ohne Erfolg. Ich verpasse wahrscheinlich etwas und es fällt mir schwer, eine Lösung dafür zu finden.

Antwort

184

aktualisieren

Für RC.6^ Version Verwendung DomSanitizer

Plunker

Und eine gute Option ist mit reinem Rohr für das:

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

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

Denken Sie daran, Ihre neue SafePipe an die declarations Array des AppModule hinzuzufügen. (as seen on documentation)

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

html

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

Plunker

Wenn Sie embed Tag verwenden, dies könnte für Sie interessant sein:


Alte Version RC.5

Sie DomSanitizationService wie diese nutzen können:

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

und binden dann an url in Ihrer Vorlage:

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

Don vergebe nicht et folgende Einfuhren hinzuzufügen:

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

Plunker sample

+1

Tnx. Gute Antwort. – izupet

+0

Alte Version funktionierte für mich ab heute, nicht sicher, was "alt" bezieht, da ich Ionic 2 benutze und DomSanitizer wurde nicht einmal erkannt (während DomSanitizationService war). Danke! – FugueWeb

+1

@FugueWeb Das ist, weil ionic2 eckigen RC4 heute verwendet https://github.com/driftyco/ionic/blob/master/CHANGELOG.md#200-beta11-2016-08-05 – yurzui

11

Dieses funktioniert für mich.

import { Component,Input,OnInit} from '@angular/core'; 
import {DomSanitizer,SafeResourceUrl,} from '@angular/platform-browser'; 

@Component({ 
    moduleId: module.id, 
    selector: 'player', 
    templateUrl: './player.component.html', 
    styleUrls:['./player.component.scss'], 

}) 
export class PlayerComponent implements OnInit{ 
    @Input() 
    id:string; 
    url: SafeResourceUrl; 
    constructor (public sanitizer:DomSanitizer) { 
    } 
    ngOnInit() { 
     this.url = this.sanitizer.bypassSecurityTrustResourceUrl(this.id);  
    } 
} 
+0

Ich bekomme folgenden Fehler: Uncaught TypeError: $ (...). AjaxChimp ist keine Funktion –

-5

Herzlichen Glückwunsch! ¨ ^^ Ich habe eine einfache & effiziente Lösung für Sie, ja!

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

[attr.src] instead of src "video.url" and not {{video.url}}

Große;)

+5

Das macht keinen Unterschied für String-Werte. –

+1

es funktioniert nicht. Fehlermeldung "unsicherer Wert in einem Ressourcen-URL-Kontext verwendet" –

+0

So können Sie die HTML5-Video-Tag verwenden, aber wenn Sie darauf bestehen, iframe (aus vielen Gründen;) zu verwenden, sehen Sie andere Lösungen, die DomSanitizationService verwenden .. – Smaillns

Verwandte Themen