Javascript 铬的单一应用

Javascript 铬的单一应用,javascript,google-chrome,web,Javascript,Google Chrome,Web,有没有人知道一种方法,可以检测Chrome中只运行了一个web应用程序实例?我目前正在使用localStorage使用一个标志,但当浏览器崩溃时,该标志仍然存在,因此下次我尝试访问应用程序时,它会给我一个错误,因为它认为另一个实例已经在运行。一些想法: 用新实例覆盖旧实例 在应用初始化时,创建一个新的“应用id”,将其覆盖到localStorage中(无论它是否存在) 在应用生命周期内,请不时检查此标志。如果它被更改为另一个值,这意味着这个实例应该被“覆盖”,所以退出 使用时间戳作为标志 在应用

有没有人知道一种方法,可以检测Chrome中只运行了一个web应用程序实例?我目前正在使用localStorage使用一个标志,但当浏览器崩溃时,该标志仍然存在,因此下次我尝试访问应用程序时,它会给我一个错误,因为它认为另一个实例已经在运行。

一些想法:

  • 用新实例覆盖旧实例

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

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

  • 使用时间戳作为标志

    在应用生命周期内,以固定的时间间隔(例如1s、10s等)将当前时间戳更新到标志中

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

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

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


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

    下面是一些其他相关的堆栈溢出线程,它们有相反的问题:


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

    如果您不介意用新实例“覆盖”旧实例,您可以在应用初始值上创建新的“应用id”,将其覆盖到本地存储中,并不时检查此标志。如果它不符合当前的应用程序id,请退出。您是否尝试了会话Cookies?这两个都是很好的建议。我想我真正想要的是一种防止用户同时登录应用程序两次的方法。这需要在登录时发生,这样才能锁定登录。@user322731我在第二种方法中添加了一些解释。如果你的应用程序使用云,也许你也可以在server-side.tutipute上处理。这正是我的结局。尝试使用localStorage的过程中已经过了工程设计阶段,但只需要设置会话cookie。不要穿得太花哨了…:)很高兴我能帮忙。