3

Facebook SDK の使用を最適化しようとしています。Chrome のネットワーク タブを見ると、SDK が読み込まれるときに、他の多数のファイルが読み込まれることがわかります。

ここに画像の説明を入力

1 つ目は、Facebook API を含むall.jsです。スクリーンショットの残りのリソースは、 への呼び出し後にロードされFB.initます。

about:blankへの 3 つの呼び出しと、xd_arbiter.phpへの 3 つの呼び出しがあります。oauthへの呼び出しが 2 つあります。最初の 2 つに 3 つの呼び出しがある理由がわかりません。

all.jsは 2 つの要素を作成するようですiframe(SDK をロードするページが HTTPS 経由で提供される場合、作成されるのはfb_xdm_frame_https1 つだけです。この状況では、3 つではなく 2 つのリクエストが行われるようです)。

<div id="fb-root" class=" fb_reset">
    <div style="position: absolute; top: -10000px; height: 0px; width: 0px; ">
        <div></div>
        <div>
            <iframe id="fb_xdm_frame_http" name="fb_xdm_frame_http"></iframe>
            <iframe id="fb_xdm_frame_https" name="fb_xdm_frame_https"></iframe>
        </div>
    </div>
</div>

iframe要素が属性なしで作成されるため、空白のページが要求されsrcます (後で JavaScript を介して追加されます)。設定されると、 xd_arbiter.phpに設定されます。

これで 3 つのうち 2 つが説明されました。しかし、about:blankxd_arbiter.phpへの他の呼び出しはどこから来るのでしょうか? JSBeautifierを介してall.jsを実行し、コードをたどることでここまで来ましたが、これらのファイルが 3 回目に要求される理由や方法がわかりません。

4

1 に答える 1

3

xd_arbiter.phpあなたのページとその後に表示されるすべてのウィジェットまたはダイアログ、または Canvas ページとして使用されている場合はメインの Facebook サイトとの間のクロスドメイン メッセージングを促進するために使用されるインフラストラクチャの一部です。

/dialog/oauth に対する 2 つのリクエストが表示されているのは、実装の問題のようです。FB.getLoginstatus(.., true)設定に加えて手動で呼び出していますstatus: trueか?

とにかく、 の 3 番目の要求xd_arbiter.phpは、クロスドメイン チャネルを介して返される /dialog/oauth 要求への応答であり、xd_arbiter.phpリソースがキャッシュされているためです (xd_arbiter の最後の要求から明らかなように、キャッシュが無効になっているようです)。実費が実際に発生します。

于 2012-07-01T01:39:09.077 に答える