как проверить содержимое Iframe с внешнего URL - PullRequest
2 голосов
/ 05 мая 2011

Я хочу использовать кнопку «Нравится» на Facebook на моем веб-сайте.

Это так просто, как все знают, но у меня есть проблема с цензурой в нашей стране. Facebook подвергается цензуре в нашей стране, и если я использую простое iframe, люди, которые не имеют доступа к Facebook (не могут пройти цензуру), увидят страницу блокировки, которую я не хочу.

Итак, я хочу проверить, является ли загруженный адрес Facebook, показать им iframe, иначе (они будут перенаправлены на другой веб-сайт) скрыть iframe.

Могу ли я узнать это? Я имею в виду что-то вроде адреса, контента или идентификатора и т. Д.


Вот мой код:

<html>
    <head>
    <title>facebook test</title>
    <style>
    .facebook{
        display:none;
        }
    </style> 
    <script type="text/javascript" src="jquery.js"></script>

    </head>
    <script type="text/javascript">
    $.ajax({
        url: 'https://graph.facebook.com/btaylor?callback=?',
        dataType: 'json',
        success: function(data) {
            $(".faceboock").show();
           // alert('success - facebook works');
           // alert('data = ' + JSON.stringify(data));
        },
        error: function() {
            alert('error - facebook fails');
        }
    });
    </script>

    <div class="faceboock">
    <iframe src="http://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2Fmypage%2F152215541478267&amp;width=292&amp;colorscheme=light&amp;show_faces=true&amp;stream=true&amp;header=true&amp;height=427" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:292px; height:427px;" allowTransparency="true"></iframe>
    </div>

Работает, когда клиент имеет доступ к Facebook, я имею в виду, что «success: function» работает, а функция error - нет.

Проблема в том, что когда Facebook недоступен, json никогда не отвечает.

Есть ли способ установить тайм-аут для ответа или что-то еще для обработки ошибки?

1 Ответ

1 голос
/ 05 мая 2011

Вы не можете проверить содержимое iframe, который не находится в том же домене, что и ваш код.

См. Одинаковая политика происхождения

  • iframe.src можно проверить без ограничений, но не изменится при перенаправлении
  • iframe.contentWindow.location.href действительно изменяется , когда происходит перенаправление, но в вашем случае недоступен из-за ограничений безопасности, упомянутых выше

Единственный способ проверить это:

  1. Выполните JSONP вызов одного из API Facebook (JSONP не имеет ограничений домена)
  2. Проверьте ответ
    Если эти вызовы JSONP также будут перенаправлены, скорее всего, будет выдано исключение вместо возврата ожидаемых значений (из-за того, что он попытается проанализировать как javascript ответ, который, скорее всего, является страницей fullhtml)

Вот рабочий пример , использующий jQuery для выполнения вызова JSONP.
Это работает из моего местоположения, не могли бы вы проверить его и посмотреть, если вы получаете предупреждение об ошибке?
Вы также можете перейти в своем браузере к URL-адресу в примере. Если facebook.com будет перенаправлен, но это не так, вам придется искать другой способ проверить это ...

...