javascript - 从数据库中将 Iframe 注入(inject) Angular 2

标签 javascript angular

我需要有关 Angular 2 中的 iframe 的帮助。

首先将 iframe 直接嵌入到组件模板中效果很好。

<iframe 
    src='http://plnkr.co/edit/zZ0BgJHvQl5CfrZZ5kzg?p=preview | safeUrl' 
    allowtransparency='true'
    frameborder='0'
    scrolling='no'  
    width='80%'
    height='500'>
</iframe>

下面是 safeUrl 管道的代码

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

@Pipe({
  name: 'safeUrl'
})
export class SafeUrlPipe implements PipeTransform {

  constructor(private sanitizer: DomSanitizationService) {

  }

  transform(url) {
    return this.sanitizer.bypassSecurityTrustResourceUrl(url);
  }

}

一切正常。

问题是当我想从数据库中加载这个 iframe 时会抛出一个错误并且不会呈现 iframe

 ERROR: browser_adapter.js:90WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).

此 Iframe 正在从 nosql 数据库中获取,并返回到嵌套在 HTML 脚本中的 Angular 2。

下面是从数据库中获取内容的示例:

"<h2>Some text returned from the DB</h2>
<iframe 
    src='http://plnkr.co/edit/zZ0BgJHvQl5CfrZZ5kzg?p=preview | safeUrl' 
    allowtransparency='true'
    frameborder='0'
    scrolling='no'  
    width='80%'
    height='500'>
</iframe>
<p>Some more text returned from the DB</p>"

关于从数据库返回时如何让它在 Angular 2 上呈现的任何建议?谢谢。

更新

这就是我将嵌套在 HTML 代码块中的 Iframe 从数据库添加到 {{ (post$ | async)?.description }} 的方式,如下所示。

<h2>{{ (post$ | async)?.title }}</h2>
<div innerHTML="{{ (post$ | async)?.description }}" ></div>

谢谢!

最佳答案

使用

<div [innerHTML]="(post | async)?.content | safeHtml }}" >

其中 safeHtml 是一个类似于 safeUrl 的管道,但它适用于 this.sanitizer.bypassSecurityTrustHtml(html);

并删除| safeUrl 来自

src='http://plnkr.co/edit/zZ0BgJHvQl5CfrZZ5kzg?p=preview | safeUrl' 

使用 src="{{...}}" 的字符串绑定(bind)不适用于 | safeHtml,而不是使用 [src]="... | safeHtml"

关于javascript - 从数据库中将 Iframe 注入(inject) Angular 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41381717/

相关文章:

javascript - 如何使用单选按钮禁用下拉列表中的选项,所有这些都在同一个下拉列表中。使用 JavaScript

javascript - KO找不到带ID的模板

angular - 如何直接从 formControl 获取验证器?

Angular ng build 不生成 dist 文件夹

google-chrome - Angular 2. Chrome : Cannot find control with unspecified name attribute 错误

unit-testing - Visual Studio 中用于 Angular 2 开发的单元测试 Typescript

typescript - 不知道如何使用 angular2 类中的接口(interface)实现枚举

javascript - 如何在两个以上的 React 应用程序之间共享数据?

javascript - AngularJS - 居中图像的水平滚动条

javascript - 未捕获的类型错误 : Cannot set property of undefined