【问题标题】:Angular - How to call ngOnDestroy when change [src] in iFrameAngular - 在 iF​​rame 中更改 [src] 时如何调用 ngOnDestroy
【发布时间】:2021-12-12 10:22:44
【问题描述】:

我有一个幻灯片应用程序,它只支持许多内部链接。

HTML

<iframe width="100%" id="iframeSlide" height="100%" #iframe frameBorder="0" [src]="urlSafe"></iframe>

TS 代码

current.urlSafe = current.sanitizer.bypassSecurityTrustResourceUrl(current.slideUrls[current.index]);

slideUrls是一个包含内部链接列表的数组,但是当新url设置为current.urlSafe时,旧url没有调用ngOnDestroy函数释放资源。

我尝试设置current.urlSafe = "about:blank";

var frame = document.getElementById("iframeSlide"),
frameDoc = frame.contentDocument || frame.contentWindow.document;
frameDoc.removeChild(frameDoc.documentElement);

但它没有调用ngOnDestroy 函数。 在内部页面中,我使用了setInterval函数,所以需要去ngOnDestroy清除Interval,而不需要在setInterval内部调用很多请求。

我引用的链接

https://web.dev/detached-window-memory-leaks/

How do I clear all intervals?

【问题讨论】:

    标签: javascript angular iframe memory-leaks setinterval


    【解决方案1】:

    更改 iframe src 相当于在浏览器地址栏中导航到新 url。在这种情况下,浏览器本身会清除顶级 JS/HTML 资源

    ngOnDestroy 如果您在应用程序中删除组件或服务,但不会在刷新时出现

    【讨论】:

    • 但是我使用控制台日志,setInterval 还没有清除,这种情况下如何清除间隔?
    • iframe src 是否正在更改为新域?
    • 不,都是 Angular 应用中的内部链接
    • 啊,我想我误会了。您可以提供链接示例,以及有关 setInterval/request 问题的更多详细信息。我看了你发布的内存泄漏链接,很有趣?
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 2019-08-25
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2012-05-02
    • 2018-02-13
    相关资源
    最近更新 更多