เนื่องจากฉันให้รายละเอียดเพิ่มเติมฉันจึงเขียนคำตอบของฉันเองตามต้นฉบับ (แทนที่จะแก้ไข)
ใช่มีวิธีการทำเช่นนี้ แต่วิธีนี้ใช้ได้กับ 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
หมายเหตุ:ฉันได้เปลี่ยน ID ผู้ใช้ซึ่งโดยปกติจะเป็นตัวเลข
ถ้าคุณอ่าน URL ข้างต้นคุณจะเห็นส่วนหนึ่งบอกว่าไม่ได้ใช้งาน = 117 นี่หมายถึงจำนวนวินาทีทั้งหมดที่บัญชีไม่ได้ใช้งาน รัฐ = ออฟไลน์ย่อมาไม่ว่าจะแชทจะเปิดหรือปิด
ดังนั้นหากต้องการปิดใช้งานสิ่งนี้เพียงเพิ่มกฎต่อไปนี้ในรายการตัวกรองที่กำหนดเองของตัวบล็อกโฆษณาของคุณ:
||*-edge-chat.facebook.com^$xmlhttprequest
หากต้องการปิดการใช้งานทั้งบน Facebook และ Messenger คุณสามารถเพิ่มสองบรรทัดต่อไปนี้:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
หรือบรรทัดเดียวโดยใช้regex :
/^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 ) ผ่านการร้องขอเดียวกัน ดังนั้นคุณไม่สามารถมีหนึ่งโดยไม่มีอื่น ๆ