Как определить, что элемент на странице результатов поиска был открыт в другой вкладке браузера

Я просмотрел SO, и этот вопрос имеет было спросил до несколько раз, но я не нашел ответов, объясняющих, как на самом деле реализуется поведение, которое я хочу реализовать.

Что я имею в виду, так это имитировать функцию booking.com, в которой, когда вы открываете результат поиска из списка результатов поиска, появляется div, указывающий, что результат был открыт в другой вкладке (или окне), и он исчезает, когда что другая вкладка (или окно) была закрыта.

Скриншот: введите здесь описание изображения

Первая попытка состояла в том, чтобы проверить, был ли какой-либо javascript прикреплен к ссылкам, но это не так, потому что, если вы просто скопируете URL-адрес из источника страницы и откроете его, функция будет работать.

Поэтому я подумал, что этим можно как-то управлять на стороне сервера, и запустил wireshark, чтобы попытаться перехватить любые вызовы ajax между двумя открытыми страницами и сервером. Было много запросов, но никто, кажется, не передает необходимую информацию (я думаю, идентификатор отеля или какой-то URL-адрес). Также обратите внимание, что открытие URL-адреса элемента результатов, который включает идентификатор сеанса, в окне инкогнито или в другом окне браузера (я имею в виду Firefox вместо Chrome), нарушает эту функцию; так что это исключает любое отслеживание сеанса или IP-адреса.

Последняя попытка, я мог подумать, что страница результатов поиска опрашивает некоторый файл cookie, который устанавливается в домене, когда открывается другая страница, и сбрасывается, когда она закрывается. Итак, я проверил файлы cookie, содержимое которых на самом деле немного загадочно для понимания, но я увидел, что ни один файл cookie на самом деле не изменяется при открытии и закрытии другой вкладки, поэтому, опять же, это невозможно сделать таким образом.

Что осталось?


person guido    schedule 06.03.2013    source источник


Ответы (1)


Теоретически должна быть возможность использовать localStorage/sessionStorage для этого, установив URL-адрес текущей страницы на каждой странице и время от времени проверяя «исходную» страницу, чтобы увидеть, не совпадает ли значение с document.location.

Если вы также установите текущее время в хранилище, вы можете проверить, закрыта ли страница, увидев, было ли «время последней вкладки», скажем, более 30 секунд назад или что-то в этом роде.

Что касается веб-сайта, я посетил его, выполнил поиск и не увидел никаких предупреждений или чего-либо об открытии новых вкладок, когда я пробовал.

person Ross Brunton    schedule 06.03.2013
comment
Ты сделал это. Дочерняя вкладка сохраняет в локальном хранилище идентификатор отеля и удаляет его при закрытии. Родительская страница объединяется в локальном хранилище и показывает/скрывает div соответствующих отелей, перечисленных в качестве результатов. Большое Вам спасибо; и добро пожаловать в переполнение стека. - person guido; 06.03.2013