как проверить содержимое Iframe по внешнему URL

#javascript #facebook-iframe

#javascript #facebook-iframe

Вопрос:

Я хочу использовать кнопку 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://www.facebook.com/pages/mypage/152215541478267amp;amp;width=292amp;amp;colorscheme=lightamp;amp;show_faces=trueamp;amp;stream=trueamp;amp;header=trueamp;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:

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

Смотрите Политику того же источника

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

Единственный способ, который я могу придумать, чтобы проверить это, это:

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

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