Как отловить запрещенную ошибку 403 в JS? - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь немного взломать этот код javascript на Facebook, чтобы позвонить на другой js, если GET не удался.

У меня есть что-то вроде этого:

<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 Forbidden, например, если try и catch(err) не работают.

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Невозможно получить статус ответа HTTP для междоменного запроса.

Причина, по которой вы получаете 403, заключается в том, что Facebook не поддерживает yi_YI в качестве локали & ndash; вы будете всегда получать 403. Запрашиваемый вами языковой стандарт должен быть в списке поддерживаемых языковых стандартов .

0 голосов
/ 06 марта 2012

использовать метод 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>
...