2012-03-06 294 views
0

我想劈一點這個Facebook的JavaScript代碼來打電話在其他JS如果GET失敗。如何在JS中捕獲403禁止的錯誤?

我有這樣的事情:

<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/yi_YI/all.js#xfbml=1&appId=###"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-comments" data-href="###" data-num-posts="10" data-width="646"></div> 

這給故宮403(/* Not a valid locale. */)。當它做這樣的事情時,我想能夠加載en_US facebook sdk。所以,我曾嘗試:

<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/yi_YI/all.js#xfbml=1&appId=###"; 
    try { fjs.parentNode.insertBefore(js, fjs); } 
    catch(err) { 
     js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=###"; 
     fjs.parentNode.insertBefore(js, fjs); 
    } 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-comments" data-href="###" data-num-posts="10" data-width="646"></div> 

但是,它不工作,不斷收到403禁止,就像如果trycatch(err)是行不通的。

回答

2

你不能跨域請求的HTTP響應狀態。

你得到一個403的原因是因爲Facebook不支持yi_YI作爲區域–你會總是得到一個403,你要求必須在list of supported locales的語言環境。

+0

由於它是一個XML文檔,因此在嘗試加載無法加載的區域設置之前進行輪詢很容易。 – DMCS 2012-03-06 21:58:00

+0

@DMCS,true。我想這取決於你是動態生成還是使用語言環境對SDK的URL進行硬編碼。在後一種情況下,您只需確保您想使用的語言環境可用。 – josh3736 2012-03-06 22:16:58

+0

太好了,謝謝!我一直在用手工支持fb支持的語言環境,arg多麼浪費時間! – Hartator 2012-03-07 12:07:11

0

使用onError方法腳本:

<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/yi_YI/all.js#xfbml=1&appId=###"; 

    //handle loading error 
    js.onerror = function(){alert("script loading error")}; 

    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-comments" data-href="###" data-num-posts="10" data-width="646"></div> 
+0

這在IE <9中不起作用。此外,onerror處理程序不區分403和任何其他錯誤(如網絡問題或阻止Facebook的內容過濾器)。 – josh3736 2012-03-06 19:08:57