2012-06-29 42 views
3

我正试图优化Facebook SDK的使用。看着Chrome的网络选项卡显示了我,当加载SDK,它拉在许多其他文件:为什么Facebook JavaScript SDK请求所有这些文件?

enter image description here

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

有3个呼叫约:空白和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从何而来?通过运行all.jsJSBeautifier并遵循代码,我已经得到了这么多,但我看不到为什么或如何第三次请求这些文件。

回答

3

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

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

无论如何,对于xd_arbiter.php第三请求是简单地向/对话框/ OAuth的请求的响应通过交叉域信道被返回,并且由于xd_arbiter.php资源被缓存(你似乎有禁用高速缓存,由作为明显最后一次请求xd_arbiter)没有真正的成本真的发生。

+0

谢谢。据我所知,没有对'getLoginStatus'的调用,但'status'选项被设置为'true'。将它设置为“false”似乎可以减少我所期望的请求数量。 –

+0

那么你绝对是在做隐式认证ping(status:true)以及做一个明确的认证 - 现在你只剩下明确的认证了。 –

+0

@SeanKinsey但为什么2个Iframe(http,https)在我的页面上? AFAIK的整个想法是,FB.login打开弹出窗口,然后在其中创建另一个** IFRAME,并使用我的页面URL的“SRC”,然后他可以通过窗口将信息发送到父窗口。 top.sendUserObj({...})'。还是我得到这个错误? [我认为是这样的](http://lh5.ggpht.com/_J_O5p0PcuKo/SkWdB-b4ZsI/AAAAAAAAHiQ/UDa_U9xUFAo/s800/cross-domain-iframe-height-lg.jpg)....(ps我使用铬27,仍然看到这些iframes)你能解释一下吗? –

相关问题