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 | } |