【问题标题】:trigger unload event in iframe app when parent application tab closes当父应用程序选项卡关闭时触发 iframe 应用程序中的卸载事件
【发布时间】:2021-01-07 07:00:51
【问题描述】:

我有两个应用程序,App1 和 App2。 App2 作为 iframe 嵌入在 App1 中,因此 App1 是嵌入 App2 的父应用程序。 当用户从浏览器关闭 App1 时,我想在 App2 中触发一个 api。 我尝试在 App2 中使用 'unload' 事件,但是当 App2 关闭时不会触发该事件(通过将调试器点放在事件侦听器函数上进行检查,该函数在独立 App2 关闭时被调用)。 有没有办法做到这一点?谢谢

【问题讨论】:

    标签: javascript iframe onunload


    【解决方案1】:

    历史上尝试在卸载事件中发出异步请求从来都不是可靠的

    因此创建了navigator.sendBeacon(url, data)

    即使在页面或标签消失后它也可以在后台运行,并有助于解决使用卸载事件的许多可靠性问题。

    使用 sendBeacon() 方法,当用户代理有机会时异步传输数据,不会延迟卸载或下一次导航。

    我从来没有在像你这样消失的 iframe 场景中使用它,但相信它会解决你的问题

    【讨论】:

    • 您好,感谢您的回复。我想在卸载时调用的 api 受网关保护,因此也需要传递 auth 标头。根据我的阅读,我们无法在 sendBeacon 调用中发送 auth 标头。这种情况有什么解决方法吗?
    • 我唯一能想到的是使用您控制的代理端点,并且可以在帖子中接受身份验证数据并创建身份验证标头以发送到其他 api
    • 感谢您的建议。我尝试使用 keepAlive true 进行 fetch,它似乎工作正常
    • 好奇你是如何使用 fetch() 的?
    • 你好,我按照这个答案实现了 fetch 与 keepAlive true stackoverflow.com/a/56169544/6002185
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多