【问题标题】:How to detect an item in a search result page has been opened in another browser tab如何检测搜索结果页面中的项目已在另一个浏览器选项卡中打开
【发布时间】:2013-03-06 01:29:09
【问题描述】:

我通过 SO 搜索,这个问题有 been asked before several times,但我没有找到解释我想要实现的行为如何实际实现的答案。

我的想法是模仿booking.com的功能,当您从搜索结果列表中打开搜索结果时,会出现一个表示该结果已在另一个选项卡(或窗口)中打开的div,并且它当其他选项卡(或窗口)关闭时消失。

截图:

第一次尝试是检查链接是否附加了一些 javascript,但事实并非如此,因为如果您只是从页面源中复制 url,然后打开它,该功能就会起作用。

所以我认为它可以在服务器端以某种方式进行管理,启动了 Wireshark 以尝试捕获两个打开的页面和服务器之间的任何 ajax 调用。有很多请求,但似乎没有人传递所需的信息(我猜是酒店 ID 或一些 url)。另请注意,在隐身窗口或另一个浏览器(我的意思是,firefox 而不是 chrome)窗口中打开包含会话 ID 的结果项 URL 会破坏该功能;这样就排除了任何会话或 IP 地址跟踪。

我能想到的最后一次尝试是搜索结果页面正在轮询一些 cookie,该 cookie 在打开另一个页面时在域上设置,在关闭时取消设置。所以我检查了 cookie,其内容实际上有点难以理解,但我看到的是在其他选项卡打开和关闭时实际上没有更改任何 cookie,所以再次,它不能这样做。

还剩下什么?

【问题讨论】:

    标签: javascript html navigation browser-history browser-tab


    【解决方案1】:

    理论上,应该可以使用localStorage/sessionStorage来做到这一点,方法是在每个页面上设置当前页面的URL,并每隔一段时间在“原始”页面上检查一下值是否不同作为document.location

    如果您在存储事物中也设置了当前时间,您可以通过查看“最后一个选项卡时间”是否超过 30 秒或类似时间来检查页面是否关闭。

    至于该网站,我访问了它并进行了搜索,但在我尝试时根本没有看到任何警告或任何关于新标签打开的信息。

    【讨论】:

    • 你成功了。子标签页将酒店 ID 保存在本地存储中,并在关闭时将其删除。父页面池在 localstorage 上,并显示/隐藏作为结果列出的各个酒店的 div。非常感谢;并欢迎堆栈溢出。
    猜你喜欢
    • 1970-01-01
    • 2016-08-12
    • 2021-01-11
    • 2016-09-05
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    相关资源
    最近更新 更多