首页 > 解决方案 > 离开页面时执行的 javascript - 更新旧代码

问题描述

只是一点背景知识 - 我正在更新一个全部是 javascript 的旧功能,因为我们的 Web 应用程序中添加了新功能,旧功能必须与之交互。

在测试此更新时,我们注意到在 Web 应用程序中从一个页面移动到另一个页面时存在问题 - 如果已激活旧功能,它应该会跟随您。基本上,激活功能的数据没有被保留。那里有一些代码应该这样做。经过一番调查,发现它在 IE/Edge 和 Firefox 中按预期工作,但退出代码没有在 Google Chrome 和 Safari 中执行。这也许可以解释为什么企业不知道这个问题,但已经确认该问题也存在于实时站点中,因此最近没有引入,因为我相信大多数用户都会使用 IE。

管理退出功能的代码如下:

    if(window.onpagehide || window.onpagehide === null){
        window.addEventListener("pagehide", storeDataFunction, false);
    } else {
        window.addEventListener("unload", storeDataFunction, false);
    }

使用上面的代码,当您尝试离开页面时,storeDataFunction 中的逻辑甚至不会执行。

在浏览了此处和其他论坛后,我已将上述内容更新为:

window.onbeforeunload = storeDataFunction;

并使 storeDataFunction 返回 null。

这似乎稍微好一点,因为在移动页面时会执行 storeDataFunction,但在其中深处有一个 ajax POST 到我们的 Web 应用程序中的控制器,该控制器存储检查该功能是否处于活动状态以及它所做的事情所需的数据此 ajax 请求不会被执行。同样,这仅适用于 Chrome 和 Safari,并且在 IE 和 Firefox 上运行良好。

所以我正在寻找的是一个引导。为了我们想要在这里实现的目标,我是否使用onbeforeunload走错了路?还是原来使用 pagehide/unload 更合适?这两个都不正确吗?有更好的方法吗?这个功能是在大约 7 年前开发的,所以我什至不确定它是否曾经在 Chrome 上工作过,或者它是否在开发时工作过,并且 Chrome 中的一些最新更新改变了它们处理页面终止的方式。

提前致谢。

标签: javascriptweb-applications

解决方案


看起来谷歌已经更新了 Chrome 以在页面关闭期间停止 XHR。

https://www.chromestatus.com/feature/4664843055398912


推荐阅读