Karena saya memberikan detail tambahan, saya menulis jawaban saya sendiri berdasarkan yang asli (bukan mengeditnya).
Ya, ada cara untuk melakukan ini, tetapi metode ini hanya berfungsi untuk Facebook dan Messenger berbasis web; Anda tidak dapat melakukan hal serupa untuk aplikasi seluler.
Pada dasarnya, Facebook menggunakan permintaan berjangka waktu di sisi server untuk memeriksa apakah klien masih tersedia. Jadi ujung depan (halaman web Facebook dimuat) secara berkala akan mengirim permintaan HTTP ( XHR ) dengan waktu idle ke server mereka.
Berikut ini contoh permintaan tersebut:
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
Catatan: Saya telah mengganti ID pengguna yang biasanya berupa angka.
Jika Anda membaca URL di atas, Anda akan melihat bagian yang mengatakan idle = 117 . Ini menunjukkan jumlah total detik dari akun yang tidak digunakan. The state = secara offline singkatan apakah chat diaktifkan atau dinonaktifkan.
Jadi, untuk menonaktifkan ini, tambahkan saja aturan berikut ke daftar filter pemblokir iklan Anda:
||*-edge-chat.facebook.com^$xmlhttprequest
Untuk menonaktifkan keduanya, Facebook dan Messenger, Anda dapat menambahkan dua baris berikut:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Atau baris tunggal, menggunakan regex :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Beberapa kekurangan dari metode ini adalah Anda tidak akan dapat menerima pesan secara real time dan Anda tidak akan muncul online walaupun obrolan aktif. Anda harus menyegarkan halaman untuk menerima pesan baru.
Untuk menghindari kedua kelemahan ini, berikut adalah satu solusinya. Anda dapat menambahkan baris ini sebagai gantinya:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Atau, tambahkan ini untuk Facebook dan Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
Hasil akhir dari ini adalah sebagai berikut:
- Ketika obrolan Anda mati, Anda tidak akan muncul online, aktivitas terakhir Anda tidak akan dilaporkan, dan Anda tidak akan dapat menerima pesan secara real time.
- Ketika obrolan Anda aktif, Anda akan muncul online, aktivitas terakhir Anda akan dilaporkan, dan Anda akan dapat menerima pesan secara real time.
Sayangnya, sepertinya tidak ada solusi lain karena ujung depan Facebook hanya dapat mengambil pesan ketika klien secara berkala melaporkan bahwa mereka aktif, maka pengambilan dilakukan setelah aktivitas terakhir dilaporkan. Kedua tindakan ini dimungkinkan oleh satu skrip back-end ( * -edge-chat.facebook.com / pull ), melalui permintaan yang sama; karena itu, Anda tidak dapat memiliki satu tanpa yang lain.