小编Pie*_*ter的帖子

如何存储每个浏览器选项卡唯一的ID?

我正在调试在多个浏览器选项卡中运行我们的Web应用程序并使用log4javascript添加客户端日志的问题.我现在正在尝试确定哪个日志行由哪个浏览器选项卡写入,因此我想为每个日志行添加唯一的选项卡ID.

这可以归结为我需要一种方法来识别浏览器选项卡是"新的"并需要接收新的选项卡ID.已收到标签ID的标签应保留此ID.

但我还没有找到一种方法来存储这样的ID:

  • 幸存标签重新加载
  • 选项卡之间总是不同的
  • 适用于托管在与嵌入页面不同的域中的iframe

这是我尝试过的:

  1. 如果选项卡的会话存储尚未包含此类ID,请将选项卡ID 存储会话存储中并生成新ID.

    这在大多数情况下都很有效.但是,在某些情况下,新选项卡会以其打开的选项卡的会话存储的完整副本开始.当通过单击引用新窗口目标的超链接打开新选项卡时,或者选项卡重复时,似乎就是这种情况.在这种情况下,我们无法区分两个选项卡,因此两个选项卡最终都使用相同的选项卡ID.

  2. 使用jQuery.data()将选项卡ID附加到HTML元素,如果HTML元素的数据尚未包含此类ID,则生成新ID.

    这是愚蠢的,因为它显然无法使标签重新加载.

  3. 将选项卡ID存储在包含我们的应用程序的iframe 的window.name中,如果window.name尚未包含此ID,则生成新ID.

    这不起作用,因为生成HTML iframe标记的嵌入应用程序(我们无法更改)会设置iframe名称,因此每次重新加载选项卡后标签ID都会丢失.

  4. 将选项卡ID存储在window.top.name中,如果window.top.name尚未包含此ID,则生成新ID.

    这不起作用,因为我们无法设置window.top.name,因为跨站点安全性约束(嵌入应用程序托管在与iframe内容不同的域中).

  5. 在包含我们的应用程序的iframe中嵌入另一个iframe,将该标签ID存储在该iframe的window.name中,如果内部iframe的window.name尚未包含此类ID,则生成一个新ID.

    这不起作用,因为即使我们在打开它时没有显式设置内部iframe的名称,iframe的名称也会在tab重新加载时重置为空字符串.这是我们打开内部iframe的方式:

    <iframe id="iframe2" src="index.jsp"></iframe>

我理解为什么前四个选项不起作用.我不确定为什么第五种选择不起作用,并怀疑我可能犯了一个小错误.

如果没有,我想知道是否有任何其他方式可以让我确定标签是新的,因此需要接收新的标签ID.

javascript iframe tabs

5
推荐指数
1
解决办法
4196
查看次数

标签 统计

iframe ×1

javascript ×1

tabs ×1