我正在尝试优化Facebook SDK的使用。查看Chrome的网络标签显示,当SDK加载时,它会提取许多其他文件:
第一个是 all.js ,其中包含Facebook API。屏幕截图中的其余资源在调用FB.init
后加载。
有3次调用 about:blank ,3次调用 xd_arbiter.php 。有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个。但另一个调用的地方:空白和 xd_arbiter.php 来自哪里?通过JSBeautifier运行 all.js 并遵循代码,我已经做到了这一点,但我无法看到第三次请求这些文件的原因或方式。
答案 0 :(得分:3)
xd_arbiter.php
是用于促进您的页面与所有后续窗口小部件或对话框之间的跨域消息传递的基础结构的一部分,或者用作Canvas页面的主要Facebook站点。
您看到两个/ dialog / oauth请求似乎是您的实施问题,除了设置FB.getLoginstatus(.., true)
之外,您是否手动调用status: true
?
无论如何,xd_arbiter.php
的第三个请求只是对通过跨域通道返回的/ dialog / oauth请求的响应,并且因为xd_arbiter.php
资源被缓存(您似乎已经缓存禁用,正如最后一次请求xd_arbiter所证明的那样,确实没有真正的成本。