3

有谁知道一种方法来检测只有一个 Web 应用程序的单个实例在 Chrome 中运行?我目前正在使用使用 localStorage 的标志,但是当浏览器崩溃之类的东西时,该标志仍​​然存在,所以下次我尝试访问该应用程序时它会给我一个错误,因为它认为另一个实例已经在运行。

4

2 回答 2

0

一些想法:

  1. 用新实例覆盖旧实例。

    在应用程序初始化时,创建一个新的“应用程序 id”,将其覆盖到 localStorage(无论它是否存在);

    在应用程序生命周期内,不时检查此标志。如果它被更改为另一个值,这意味着这个实例应该被“覆盖”,所以退出。

  2. 使用时间戳作为标志。

    在app生命周期内,以固定的时间间隔(如1s、10s等)将当前时间戳更新到flag中;

    在应用程序初始时,将当前时间戳与此标志进行比较:

    • 如果它“足够短”,您可以假设应用程序当前正在运行,并拒绝继续;

    • 如果它“足够长”,则意味着最后一个实例意外退出,您可以“安全地”运行这个新实例,并可能提供一些有用的信息。

于 2013-04-03T05:16:48.190 回答
0

根据我对 Session Cookies 的评论,据我所知,Chrome 为所有选项卡(每个进程)维护相同的会话,因此它可能是您的理想解决方案,特别是因为您希望/需要在 Chrome 关闭后清除会话向下。

以下是其他一些具有相反问题的相关 Stack Overflow 线程:

为什么关闭选项卡不会关闭会话 Cookie?

如何在浏览器选项卡中区分会话?

您仍然可以将持久值(跨会话值)保存在常规 cookie/本地存储中。

于 2013-04-07T09:01:30.010 回答