Ponieważ podaję dodatkowe szczegóły, piszę własną odpowiedź na podstawie oryginału (zamiast go edytować).
Tak, jest na to sposób, ale ta metoda działa tylko w przypadku internetowych serwisów Facebook i Messenger; nie możesz zrobić czegoś podobnego dla aplikacji mobilnych.
Zasadniczo Facebook używa żądań czasowych po stronie serwera, aby sprawdzić, czy klient jest nadal dostępny. Zatem interfejs użytkownika (ładowana strona internetowa Facebooka) będzie okresowo wysyłać żądanie HTTP ( XHR ) z czasem bezczynności do swoich serwerów.
Oto przykład takiej prośby:
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
Uwaga: zastąpiłem identyfikator użytkownika, który normalnie byłby liczbą.
Jeśli przeczytasz powyższy adres URL, zobaczysz część idle = 117 . Oznacza to całkowitą liczbę sekund, przez które konto było bezczynne. State = nieaktywny stoi na czat czy jest włączony, czy wyłączony.
Aby to wyłączyć, po prostu dodaj następującą regułę do niestandardowej listy filtrów blokera reklam:
||*-edge-chat.facebook.com^$xmlhttprequest
Aby wyłączyć zarówno na Facebooku, jak i Messengerze, możesz dodać następujące dwa wiersze:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Lub pojedyncza linia, używając wyrażenia regularnego :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Kilka wad tej metody polega na tym, że nie będziesz w stanie odbierać wiadomości w czasie rzeczywistym i nie pojawi się online, nawet jeśli czat jest włączony. Musisz odświeżyć stronę, aby otrzymywać nowe wiadomości.
Aby uniknąć obu tych wad, oto jedno obejście. Zamiast tego możesz dodać ten wiersz:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Lub dodaj to do obu, Facebook i Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
Efektem końcowym będzie:
- Gdy czat jest wyłączony, nie będziesz pojawiać się w trybie online, Twoja ostatnia aktywność nie zostanie zgłoszona i nie będziesz w stanie odbierać wiadomości w czasie rzeczywistym.
- Po włączeniu czatu pojawi się on w trybie online, zostanie zgłoszona ostatnia aktywność i będziesz mógł odbierać wiadomości w czasie rzeczywistym.
Niestety wydaje się, że nie ma innego rozwiązania, ponieważ interfejs Facebooka może pobierać wiadomości tylko wtedy, gdy klient okresowo zgłasza, że są aktywne, dlatego pobieranie odbywa się po zgłoszeniu ostatniej aktywności. Oba te działania są możliwe za pomocą jednego skryptu zaplecza ( * -edge-chat.facebook.com / pull ) poprzez to samo żądanie; dlatego nie możesz mieć jednego bez drugiego.