Javascript URL清理导致嵌入式YouTube视频刷新
我的AngularJS 2应用程序有问题(我使用的是AngularJS 2的RC5版本)。似乎一个经过清理的URL正在触发更改检测,然后更新下面的Javascript URL清理导致嵌入式YouTube视频刷新,javascript,angular,youtube,Javascript,Angular,Youtube,我的AngularJS 2应用程序有问题(我使用的是AngularJS 2的RC5版本)。似乎一个经过清理的URL正在触发更改检测,然后更新下面的div,尽管我的组件状态没有任何更改 从用户的角度来看,这表现为视频播放时的重新加载 因此,在我的组件视图中,我有: <div *ngIf="isVideo(item)"> <iframe [src]="getTrustedYouTubeUrl(item)" scrolling="no" frameborder="0" allo
div
,尽管我的组件状态没有任何更改
从用户的角度来看,这表现为视频播放时的重新加载
因此,在我的组件视图中,我有:
<div *ngIf="isVideo(item)">
<iframe [src]="getTrustedYouTubeUrl(item)" scrolling="no" frameborder="0" allowfullscreen></iframe>
</div>
在调试器中,我看到div经常被刷新,这是由AngularJS2框架中触发的某个事件引起的
如果我用硬编码的URL替换上面的HTML片段,问题就会消失:
<div *ngIf="isVideo(item)">
<iframe src="<hardcoded youtube url here>" scrolling="no" frameborder="0" allowfullscreen></iframe>
</div>
所以我怀疑是URL清理造成的
谁能给我指出正确的方向吗?一个嵌入式YouTube视频的工作示例,其URL绑定到组件上的属性可能?我会尝试将其与一起使用 Angular仅在检测到管道的纯更改时才执行纯管道 输入值。纯更改是对原始输入的更改 值(字符串、数字、布尔值、符号)或已更改的对象引用 (日期、数组、函数、对象) 管道可能看起来像(RC.6-domsanizizer变成而不是domsanizationservice): 并按如下方式使用:
<iframe [src]="url | safe" frameborder="0" allowfullscreen></iframe>
(试着按下按钮)找到了答案
对任何感兴趣的人。问题是在我的html中使用了这个函数
[src]="getTrustedYouTubeUrl(item)"
当数据加载到我的服务中时,当我更改代码以计算安全url并将iframe绑定更改为该url时,重新加载的副作用就消失了
<iframe [src]="item.video.safeUrl" scrolling="no" frameborder="0" allowfullscreen></iframe>
请注意,R I现在绑定到一个属性 您可以保留原始解决方案,只需使用
changeDetection:ChangeDetectionStrategy.OnPush
结合前面的答案,以这种方式工作: component.ts(仅适用于相关零件) template.html
<iframe
[src]='this.safeUrl'>
</iframe>
@ViewChild('ytplayer',null)ytplayer:ElementRef;
恩戈尼尼特(){
this.ytPlayer.nativeElement.src=this.act.iframe;
}
由于使用sanitizer.bypassSecurityTrustResourceUrl,会发生重新加载。
所以我们不应该使用它。
我觉得比较舒服。
谢谢。谢谢,我试试看。我已经找到了另一种解决方法,但这似乎是一个有趣的想法。无法获取/SafeValue%20must%20use%20[property]=绑定:%20https://www.youtube.com/embed/wyVM1evRxNw%20(见%20)http://g.co/ng/securityNice 解决方案!Plunker由于某些原因无法工作,这里是一个最新版本(使用Angular v4.2.3)@istibekesi谢谢。我修复了plunkerGood solution我喜欢它。angular 5中的工作就像一个符咒。Thx在使用[src]=“sanitizer.bypassSecurityTrustResourceUrl(this.Url)”几个月后,同样的问题突然出现在我面前。我不知道它为什么会启动(angular 4.4,并且没有更新它)。但是,您的解决方案解决了它。谢谢!@Anthony您到底是如何解决它的?我现在有同样的问题,我使用Angular 2。我也使用[src]=“sanitizer.bypassSecurityTrustResourceUrl(this.Url),但是当我将src绑定到属性时,我得到了“错误:需要一个安全的ResourceURL,得到了一个Url(请参阅)”消息。@handris请参见上面的答案。加载数据时,您是如何更改计算安全url的代码的?我无法解决此问题:(正是我所需要的…此方法应用程序只允许消毒器运行一次。此问题通过我的自动闪烁谷歌地图得到解决。谢谢谢谢,它对我有效
<iframe [src]="item.video.safeUrl" scrolling="no" frameborder="0" allowfullscreen></iframe>
<div *ngIf="isVideo(item)">
<iframe [src]="getTrustedYouTubeUrl(item)" scrolling="no" frameborder="0" allowfullscreen></iframe>
</div>
import { DomSanitizer } from '@angular/platform-browser';
constructor(
private sanitizer: DomSanitizer
) {
this.sanitizer = sanitizer;
}
ngOnInit() {
this.getTrustedUrl('http://someUrl');
}
getTrustedUrl(url:any){
this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);
}
<iframe
[src]='this.safeUrl'>
</iframe>
<iframe #ytplayer width="100%" height="235" frameborder="0" src="">
</iframe>
@ViewChild('ytplayer', null) ytPlayer: ElementRef;
ngOnInit() {
this.ytPlayer.nativeElement.src = this.act.iframe;
}