【问题标题】:With two tabs open to site, can you tell which tab is active?网站上有两个标签页,你能分辨出哪个标签页是活动的吗?
【发布时间】:2012-03-21 21:15:23
【问题描述】:

我们的 Intranet 网站有一组不同寻常的要求。

  • 它的功能类似于多页桌面应用程序。对于单个客户,我们的用户将在多达 30 个屏幕上输入信息。
  • 这是一个基于 Asp.Net MVC3 的站点,所有会话状态均已禁用,以便在网络场上高效运行。
  • 出于隐私原因,我们不能使用查询字符串来显示任何客户信息。我们目前正在使用 cookie 来存储客户身份。
  • 我们的用户群希望在一个浏览器(IE、FF 或 Chrome)中打开多个标签页。

如果我假设用户只使用一个,那么我可以将客户端信息存储在一个简单的 cookie 中,一切正常。

当用户打开第二个选项卡时,它会重复使用相同的 cookie。不是想要的条件。那么是否可以确定浏览器选项卡之间的差异?

【问题讨论】:

  • 您的需求中的断言似乎表明对编写它们的人缺乏了解。为什么在查询字符串中保留客户信息的唯一标识符会损害隐私?
  • 这与数据的性质有关。但是,加密密钥听起来是个好主意。
  • 我认为一个通用的唯一标识符就足够了。

标签: javascript asp.net-mvc browser


【解决方案1】:

您可以使用sessionStorage 对象来存储特定于单个窗口/选项卡的数据。它与任何其他 JavaScript 对象一样工作,因为您可以分配 (sessionStorage.foo = "bar")、检索 (baz = sessionStorage.foo) 和删除 (delete sessionStorage.foo),但与其他 JS 对象不同,任何属性集将在单个页面加载中保持不变窗口。

唯一的缺点是它不会将此数据发送到服务器。您必须自己使用 AJAX 调用来执行此操作。

【讨论】:

    【解决方案2】:

    查看window.name 变量。在页面加载时,您可以在其中添加一些独特的内容,例如日期/时间,并将相同的内容存储在您的 cookie 中(如果它不存在)。如果用户打开一个新选项卡(或窗口),该值将为空并且 cookie 不会。 window.name 在页面加载时持续存在(如果内存可用),因此这将允许您唯一标识每个选项卡。

    【讨论】:

    • window.name 不应该被依赖,尤其是现在有更合适的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多