【发布时间】:2012-06-15 20:13:44
【问题描述】:
我正在尝试确定某种方法来为满足以下条件的 Chrome 标签页建立唯一 ID:
- 唯一标识每个选项卡
- 浏览器重新启动之间的给定选项卡(会话恢复的选项卡)保持不变
- 如果选项卡已关闭然后使用撤消关闭的选项卡 (Ctrl+Shift+T) 重新打开,则保持不变
- 标签重复时保持不同
我进行了一些相当激进的研究以找到一个全面的解决方案,但似乎没有什么能完全奏效。以下是我尝试过的方法,按效果递增的顺序排列:
- 使用 Chrome 提供的 tab.id: 不会在浏览器会话或关闭/撤消关闭之间持续存在
- 在 cookie 中添加 GUID: 每个选项卡不是唯一的,仅每个域/URL 是唯一的
- 在 localStorage 中放置一个 GUID: 在浏览器会话和关闭/撤消关闭之间持续存在,但每个选项卡不是唯一的,仅每个域是唯一的
- 在 sessionStorage 中放置一个 GUID: 每个标签页唯一,在关闭/撤消关闭时保持不变,对于重复的标签页是唯一的,但在浏览器会话之间消失
-
使用可识别的网页文档属性作为唯一键:这是迄今为止我发现的最佳方法。可以通过内容脚本从以下值构造密钥:
[location.href, document.referrer, history.length]。
关于最后一种方法,构造的键在所有共享公共 URL、引荐来源网址和历史记录长度的选项卡中是唯一的。对于浏览器重新启动/会话恢复和关闭/撤消关闭之间的给定选项卡,这些值将保持不变。虽然这个键是“非常”独特的,但在某些情况下它是模棱两可的:例如,打开到http://www.google.com 的 3 个新标签都将具有相同的键(这种事情在实践中经常发生)。
“将 GUID 放入 sessionStorage”方法还可用于在当前浏览器会话期间消除具有相同构造键的多个选项卡之间的歧义,用于关闭/撤消关闭和重复选项卡的情况。但这并不能解决浏览器重启之间的歧义问题。
在会话恢复期间,可以通过观察 Chrome 在哪些窗口中同时打开哪些选项卡,并根据预期的“兄弟”选项卡的存在推断给定的模棱两可键哪个选项卡属于哪个窗口(在上一个浏览器会话)。正如您可能想象的那样,实施此解决方案非常复杂且相当狡猾。它只能消除 Chrome 恢复到不同窗口的相同键选项卡之间的歧义。这使得恢复到同一个窗口中的相同键的选项卡变得不可调和的模棱两可。
有没有更好的方法?在浏览器重新启动(会话恢复)和关闭/撤消关闭之间持续存在的保证唯一的、浏览器生成的每个选项卡 GUID 是理想的,但到目前为止我还没有找到类似的东西。
【问题讨论】:
标签: javascript google-chrome google-chrome-extension guid