3

我正在尝试优化 Facebook SDK 的使用。查看 Chrome 的网络选项卡告诉我,当 SDK 加载时,它会拉入许多其他文件:

在此处输入图像描述

第一个是all.js,其中包含 Facebook API。屏幕截图中的其余资源在调用FB.init.

about:blank有 3 次调用,对xd_arbiter.php有 3 次调用。有 2 次调用oauth。我无法弄清楚为什么前两个有 3 个电话。

似乎all.js创建了 2 个iframe元素(如果加载 SDK 的页面通过 HTTPS 提供,则只创建一个 - 那个fb_xdm_frame_https。在这种情况下,似乎发出了 2 个请求而不是 3 个):

<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并遵循代码,我已经做到了这一点,但我看不出第三次请求这些文件的原因或方式。

4

1 回答 1

3

xd_arbiter.php是基础架构的一部分,用于促进您的页面与所有后续显示的小部件或对话框之间的跨域消息传递,或者如果用作 Canvas 页面,则为 Facebook 主站点。

您看到两个对 /dialog/oauth 的请求似乎是您的实现问题,FB.getLoginstatus(.., true)除了设置之外,您是否手动调用status: true

无论如何,第三个请求xd_arbiter.php只是对通过跨域通道返回的 /dialog/oauth 请求的响应,并且由于xd_arbiter.php资源被缓存(您似乎禁用了缓存,如 xd_arbiter 的最后一个请求所示)没有真正的成本是真的发生了。

于 2012-07-01T01:39:09.077 回答