Поскольку я предоставляю дополнительную информацию, я пишу свой собственный ответ на основе оригинала (вместо того, чтобы редактировать его).
Да, есть способ сделать это, но этот метод работает только для веб-сайтов Facebook и Messenger; вы не можете сделать что-то подобное для мобильных приложений.
В основном Facebook использует синхронизированные запросы на стороне сервера, чтобы проверить, доступен ли клиент. Поэтому внешний интерфейс (загруженная веб-страница Facebook) будет периодически отправлять HTTP-запрос ( XHR ) со временем простоя на свои серверы.
Вот пример такого запроса:
https://1-edge-chat.facebook.com/pull?channel=p_<UserID>&seq=0&partition=-2&clientid=18ae8ecc&cb=ie3k&idle=117&qp=y&cap=8&msgs_recv=0&uid=userid&viewer_uid=userid&msgr_region=FRC&state=offline
Примечание: я заменил идентификатор пользователя, который обычно был бы числом.
Если вы прочтете приведенный выше URL, вы увидите часть, в которой говорится idle = 117 . Это обозначает общее количество секунд, в течение которых аккаунт простаивал. Состояние = отсутствует означает , включен ли чат или выключить.
Итак, чтобы отключить это, просто добавьте следующее правило в пользовательский список фильтров вашего рекламного блокиратора:
||*-edge-chat.facebook.com^$xmlhttprequest
Чтобы отключить Facebook и Messenger, вы можете добавить следующие две строки:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Или одной строкой, используя регулярное выражение :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Недостатки этого метода в том, что вы не сможете получать сообщения в режиме реального времени и не будете появляться в сети, даже если чат включен. Вам придется обновить страницу, чтобы получать новые сообщения.
Чтобы избежать обоих этих недостатков, вот один из обходных путей. Вы можете добавить эту строку вместо:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Или добавьте это для Facebook и Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
Конечный результат этого будет следующим:
- Когда ваш чат отключен, вы не будете появляться в сети, о вашей последней активности не будет сообщено, и вы не сможете получать сообщения в режиме реального времени.
- Когда ваш чат включен, вы появитесь в сети, о вашей последней активности будет сообщено, и вы сможете получать сообщения в режиме реального времени.
К сожалению, другого решения, похоже, не существует, поскольку клиентская часть Facebook может извлекать сообщения только тогда, когда клиент периодически сообщает, что они активны, поэтому извлечение выполняется после сообщения о последней активности. Оба эти действия становятся возможными с помощью одного внутреннего сценария ( * -edge-chat.facebook.com / pull ) по одному и тому же запросу; следовательно, вы не можете иметь одно без другого.