Единственное решение, которое я могу придумать, которое является достаточно точным, заключается в следующем:
Запустите сеанс на стороне сервера с первым запросом приложения.Запомните подобное состояние из подписанного запроса и отметки времени, когда оно было выпущено.
Вставьте интервал javascript в приложения (ы) вкладок, вызывая AJAX-запрос к вашему серверу каждые пару секунд.Я думаю, что у вас есть что-то между 2 и максимум 5 секунд.Запрос AJAX обновляет только временную метку в сеансе.
Если пользователь нажимает, как в верхней части страницы, теперь вся страница facebook перезагружается - то же самое происходит с вашим приложением, и вы получаете новый подписанный запрос, который имееттеперь для любимого состояния установлено значение 1. Посмотрите на свой сеанс> было ли ранее состояние 0?Да?Является ли метка времени макс.6-10 секунд?Да?Что ж, наиболее вероятно тогда, что пользователю понравилась страница, когда он находился на вкладке.
Я ненавижу решение с интервалом AJAX, загрязняющим сеть (и на большом сайте с большим количеством пользователей это вызовет нагрузку на ваш сервер), но я не могу придумать никакого другого решения, потому что нет другого способа отслеживать, просматривает ли пользователь вашу вкладку.Если интервал слишком велик, пользователь сможет перейти к разделу стены или информации и полюбить там страницу.Если после этого он сразу вернется к вашей вкладке, вы не сможете отследить, если он вообще покинул вкладку ...
Другим решением будет прослушивание события body.unload и запуск AJAX.запрос к серверу, сообщающий, что пользователь покинул вкладку, но возможно, что событие не будет запущено в определенных браузерах, или запрос AJAX недостаточно быстр, чтобы его обработать до выгрузки вкладки.С другой стороны, это решение потребовало бы гораздо меньше ресурсов как сети пользователей, так и производительности ваших серверов.
Это всего лишь теоретические решения, и их нужно сначала протестировать!