代码之家  ›  专栏  ›  技术社区  ›  Bálint Bakos

角6 iframe绑定

  •  0
  • Bálint Bakos  · 技术社区  · 6 年前

    有一个变量存储iframe代码。 我想把它装在一个分区里,但没用。

    HTML:

    <div class="top-image" [innerHTML]="yt"></div>
    

    TS:

    yt = '<iframe class="w-100" src="https://www.youtube.com/embed/KS76EghdCcY?rel=0&amp;controls=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>';
    

    解决方案是什么?

    1 回复  |  直到 6 年前
        1
  •  8
  •   SiddAjmera    6 年前

    您可能会收到一个警告,说它是不安全的HTML。这就是为什么Angular没有在 div .

    你必须 DomSanitize 它:

    <div class="top-image" [innerHTML]="yt | safe: 'html'"></div>
    

    这是烟斗 courtesy Swarna Kishore .

    import { Pipe, PipeTransform } from '@angular/core';
    import { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';
    
    @Pipe({
      name: 'safe'
    })
    export class SafePipe implements PipeTransform {
    
      constructor(protected sanitizer: DomSanitizer) {}
    
      public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {
        switch (type) {
          case 'html':
            return this.sanitizer.bypassSecurityTrustHtml(value);
          case 'style':
            return this.sanitizer.bypassSecurityTrustStyle(value);
          case 'script':
            return this.sanitizer.bypassSecurityTrustScript(value);
          case 'url':
            return this.sanitizer.bypassSecurityTrustUrl(value);
          case 'resourceUrl':
            return this.sanitizer.bypassSecurityTrustResourceUrl(value);
          default:
            throw new Error(`Invalid safe type specified: ${type}`);
        }
      }
    }
    

    这里有一个 Sample StackBlitz .