【问题标题】:how to sanitize url for angular 4如何清理 Angular 4 的 url
【发布时间】:2018-04-09 20:43:09
【问题描述】:

我正在尝试使用 Object html 标签来显示我在服务器端制作的 PDF,但是当我对 url 进行硬编码时它可以工作,当我将它放入变量中时,它给了我一个 Angular 错误,并且没有显示任何内容:

unsafe value used in a resource URL context

我首先尝试使用消毒剂,但我读到它只能与支持href / src 的标签一起使用,在我的情况下,它的数据如下:

<object data="{{pdfSrc}}" type="application/pdf" width="100%" height="100%">

    </object><br>

这是我首先尝试的:

pdfSrc: any =this.sanitizer.bypassSecurityTrustUrl('http://my_url.com') ;

谢谢你

【问题讨论】:

  • 您可以使用iframe 之类的this question 吗?编辑:Gunter 的解决方案更好
  • 你能添加一个链接到你阅读它的地方吗?它应该只用于href/src好吗? :)

标签: angular


【解决方案1】:

你需要用来绑定sanitizer的结果

[data]="pdfSrc"

因为

data="{{pdfSrc}}"

仅用于导致清理信息被剥离的字符串绑定

【讨论】:

  • result* 拼写错误,提问者还提到除了href / src 之外不应使用它,这是真的吗?
  • 感谢您的回复,但我仍然有同样的错误
  • 是的,这就是我在网上查找时发现的
【解决方案2】:

您的问题的标题是“如何清理 Angular 4 的 url”,但实际上您没有进行清理,而是绕过了安全检查。你应该改用sanitizeUrl

https://github.com/angular/angular/blob/6d1367d29707c2c449fda1adfa8a7177693f680b/packages/core/src/sanitization/sanitization.ts#L122

【讨论】:

  • 将该方法导入打字稿文件时遇到问题
  • 知道了:this.sanitizer.sanitize(SecurityContext.URL, url)
【解决方案3】:

我找到了基于 Günter Zöchbauer 答案的解决方案,我使用了他的方法,但我传递的不仅仅是变量,而是像这样对 URl 进行清理的函数:

    <object [data]="cleanURL(pdfSrc)" type="application/pdf" width="100%" height="100%">

    </object>

这里是 CleanURL 函数:

cleanURL(oldURL ): SafeUrl {
 return   this.sanitizer.bypassSecurityTrustResourceUrl(oldURL);
 }

【讨论】:

  • 但是 Gunter 的回答不正确......您必须使用内置 Angular 服务清理 URL,如本回答所示,否则它将继续从链接中删除“不安全”文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2018-05-15
  • 2019-04-12
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多