为什么Facebook JavaScript SDK要请求所有这些文件?

3

我试图优化使用Facebook SDK。查看Chrome的网络选项卡,可以看到加载SDK时会拉取许多其他文件:

enter image description here

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

有三次调用about:blank和三次调用xd_arbiter.php。有两次调用oauth。我无法确定为什么前两个会有三个呼叫。

似乎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>
< p >由于< code >iframe< /code >元素是使用无< code >src< /code >属性创建的(它稍后通过JavaScript添加)。当它被设置时,它会被设置为xd_arbiter.php

所以这解释了其中的2个。但是另外对about: blank< / em> 和 xd_arbiter.php< / em> 的调用来自哪里?我通过将all.js< / em>通过JSBeautifier运行并跟踪代码到此处,但我看不到为什么或如何请求第三次那些文件。

1个回答

3

xd_arbiter.php是用于在您的页面和所有后续小部件或对话框之间进行跨域消息传递的基础设施的一部分,如果作为画布页面使用,则与主Facebook网站。

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

无论如何,第三个 xd_arbiter.php 请求只是通过跨域通道返回的/ dialog / oauth 请求的响应,由于xd_arbiter.php资源被缓存(您似乎已禁用缓存,正如最后一个xd_arbiter的请求所示),因此将不会产生真正的成本。


谢谢。据我所知,没有调用getLoginStatus,但是status选项被设置为true。将其设置为false似乎可以减少请求的数量,符合我的预期。 - James Allardice
那么你肯定正在执行隐式身份验证ping(状态:true),并且正在执行显式身份验证 - 现在你只剩下显式身份验证。 - Sean Kinsey
@SeanKinsey 但是为什么我的页面上有两个IFrames(http,https)?据我所知,整个想法是FB.login打开弹出窗口,然后在其中创建另一个IFRAME,并将其SRC设置为我的页面URL,然后可以通过window.top.sendUserObj({...})将信息发送到父窗口。还是我完全搞错了?我认为应该是这样的....(附言:我使用的是Chrome 27,仍然看到那些IFrames。)你能解释一下吗? - Royi Namir
@SeanKinsey 我在这里问了。如果能得到答案,我会很高兴的 :-) https://dev59.com/N2Qn5IYBdhLWcg3wZGd4 - Royi Namir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接