web-dev-qa-db-ja.com

Facebookチャットの可用性を無効にします(今すぐアクティブ、今すぐアクティブ、x分前にアクティブ)

Facebookチャットの可用性を無効にするにはどうすればよいですか?チャットはオフラインで、FirefoxでWindows 7を使用しています。モバイルFacebookから他のアカウントでログインしてチャット会話を開くと、マウスを動かしたりページを更新したりするたびに、コンピューターで使用しているアカウントが「今」アクティブになっていることがわかります。

どうすれば無効にできますか? AdBlock Plusなどによってブロックされる可能性のある特定のハートビートメッセージはありますか?

15
a man in love

さて、このステータスをブロックするソリューションを見つけました。

基本的に、Facebookはタイマーを使用するため、x分ごとにアイドル時間を使用してハートビートメッセージをサーバーに送信します。

このようなWebリクエストの例を次に示します。

https://1-Edge-chat.facebook.com/pull?channel=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

このリンクを読むと、&idle = 117がアカウントがアイドル状態になっていた合計秒数であることがわかります。 state = offlineは、チャットがアクティブかオフラインかを表します

15桁のユーザーIDを置き換えたことに注意してください。

したがって、これを無効にするには、AdBlockフィルターに次のルールを追加します。

https://*-Edge-chat.facebook.com

この方法の欠点の1つは、リアルタイムでメッセージを受信できないことです。メッセージを取得するには、ページを更新する必要があります。

11
a man in love

追加の詳細を提供しているため、 元の (編集する代わりに)に基づいて独自の回答を書いています。

はい、これを行う方法がありますが、この方法はWebベースのFacebookおよびMessengerでのみ機能します。モバイルアプリでは同様のことはできません。

基本的に、Facebookはサーバー側で時間制限のあるリクエストを使用して、クライアントがまだ利用可能かどうかを確認します。そのため、フロントエンド(ロードされたFacebook Webページ)は、アイドル時間とともに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を読むと、idle = 117と書かれている部分が表示されます。これは、アカウントがアイドル状態になっていた合計秒数を示します。 state = offlineは、チャットがオンかオフかを表します。

そのため、これを無効にするには、広告ブロッカーのカスタムフィルタリストに次のルールを追加するだけです。

||*-Edge-chat.facebook.com^$xmlhttprequest

FacebookとMessengerの両方で無効にするには、次の2行を追加できます。

||*-Edge-chat.facebook.com^$xmlhttprequest
||*-Edge-chat.messenger.com^$xmlhttprequest

または、 regex を使用した単一行:

/^https?\:\/\/\d+-Edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest

この方法のいくつかの欠点は、リアルタイムでメッセージを受信できず、チャットがオンになっていてもオンラインで表示されないことです。新しいメッセージを受信するには、ページを更新する必要があります。

これらの欠点の両方を回避するために、1つの回避策があります。代わりに次の行を追加できます。

/^https?\:\/\/\d+-Edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest

または、FacebookとMessengerの両方にこれを追加します。

/^https?\:\/\/\d+-Edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest

最終結果は次のようになります。

  1. チャットがオフの場合、あなたはオンラインに表示されず、最後のアクティビティは報告されず、リアルタイムでメッセージを受信することはできません。
  2. チャットをオンにすると、オンラインで表示され、最後のアクティビティが報告され、リアルタイムでメッセージを受信できるようになります。

残念ながら、Facebookのフロントエンドは、クライアントがアクティブであると定期的に報告する場合にのみメッセージをフェッチできるため、最後のアクティビティが報告された後にフェッチが行われるため、他のソリューションはないようです。これらのアクションは両方とも、同じリクエストを通じて、単一のバックエンドスクリプト(*-Edge-chat.facebook.com/pull)によって可能になります。したがって、一方が他方なしで存在することはできません。

0