javascript - iframe加载无限角度2
问题描述
我正在尝试在 Angular 2 项目中创建非常简单的 iframe。 代码
如果我在 iframe src 中使用原始 url,则会出现错误unsafe value used in a resource URL context
<!-- 1) Error : unsafe value used in a resource URL context -->
<iframe (load)="yourLoadFunction()" [src]="'/'" frameborder="0" width="1000px" height="500px"></iframe>
如果我DomSanitizer.bypassSecurityTrustResourceUrl
用于 url sanitize,它可以工作,但 iframe 加载无限时间,奇怪的嗯。代码(检查控制台)
<!-- 2) Infinite loop Iframe loading -->
<iframe (load)="yourLoadFunction()" [src]="sanitizer.bypassSecurityTrustResourceUrl('/')" frameborder="0" width="1000px" height="500px"></iframe>
所以,我已经为下面的 url 创建了管道,它可以正常工作
safe-url.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({
name: 'safeUrl'
})
export class SafeUrlPipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {}
transform(url) {
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
}
HTML 视图
<!-- 3) Working with pipe -->
<iframe (load)="yourLoadFunction()" [src]="'/' | safeUrl" frameborder="0" width="1000px" height="500px"></iframe>
现在,我有问题
为什么
unsafe value used in a resource URL context
纯html iframe工作的角度错误为什么
DomSanitizer.bypassSecurityTrustResourceUrl
导致 iframe 无限加载但pipe
功能不同
解决方案
因为当您将一个方法传递给模板绑定时,该方法会在每个更改检测周期中被调用。
Angular 无法查看标记中的方法返回的值是否与之前的值相同,而无需实际调用它。
它返回 a SafeResourceUrl
,我相信其中包含可以随每次调用而改变的元数据。
另一方面,除非输入值发生变化,否则不会再次调用管道。
这就是为什么通常最好不要将方法调用直接绑定到输入值的原因。
推荐阅读
- java - 针对 MVC 模式规则的 JavaFX 代码优化
- kotlin - Room.databaseBuilder() 即使从 androidx.room.Room 导入后也找不到 Room 依赖项
- algorithm - 可逆短密码序列
- java - Android 我选择的图像旋转了
- gradle - 找不到参数的方法 compile() [com.jcraft:jsch:0.1.53]
- python - 用于食物的 Python 中的 NLP
- vue.js - VueJS-Router 在哈希模式下重复 URL 并且刷新时会在历史模式下提供空白页面
- google-cloud-platform - 我的“存储 PD 容量”费用从何而来?
- docker - Docker 容器不使用 json 中提供的服务帐户凭据
- javascript - 为什么 bootstrap-vue 不渲染 onclick?