2012-06-29 80 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)你能解釋一下嗎? –

相關問題