Notes for a front-end developer, esyou.net

0%

ANGULAR2+使用IFRAME展示外链提示UNSAFE VALUE USED IN A RESOURCE URL CONTEXT解决方法

iframe在web项目中确实很少使用,但是在手机app中,很多人可能会使用到今天我在使用的过程中就出现了错误unsafe value used in a resource URL context,这个错误后面还跟了一个短网址,打开后就跳转到了angular.io的官方网站去了,大概是到了这里:
https://angular.io/guide/security#xss
如果你英文水平不错,应该看看这个页面就会解决了吧!如果你懒得去官方研究那些难懂的英文,那么久跟着我一起来处理吧!

场景

比如说注册页面,需要用户同意相关法律法规以及注册条款等,因此就需要将相关的条款展示出来,一般的做法就是后端给出json数据或者其他类型的数据,让前端去调用。但是如果是一个简单的页面,那就没有必要进行数据库存储的话,那就直接在iframe中嵌入这个外部的url即可。

使用过程

如果不在ts中写url,直接在iframe的src中写url,我完全没有问题的,并且不会提示任何错误。但是由于之前我写了一个config.ts将所有的配置都放到了里面,包括url,因此我只能通过下面的方法进行实现!=
一般人会这样去使用url

1
import ......
2
public thisUrl = "http://www.yousite.com";

html模板中这样使用

1
<iframe src="{{thisUrl}}"></iframe>

或者

1
<iframe [src]="thisUrl"></iframe>

不过如此的逻辑并没有什么问题,但是angular依然提示了错误,最主要的原因是因为angular的安全机制阻止了这个外部的url,因此需要使用官方提供的一个安全方法Sanitization(我觉得应该是消毒或者杀毒之类的意思吧)。

使用DomSanitizer

1
//先导入功能模块DomSanitizer
2
import { DomSanitizer } from '@angular/platform-browser';
3
//在constructor中定义一个DomSanitizer
4
constructor(private sanitizer:DomSanitizer){
5
//在这里对url进行处理
6
this.url = this.sanitizer.bypassSecurityTrustResourceUrl('http://www.yousite.com');
7
}