Подтвердить что ты не робот

Facebook API API HTTPS

На веб-сайте, на котором я работаю, есть опция входа в Facebook, но недавно пользователь сообщил, что он не работает на них. Я отключил мои расширения и т.д., Я получил эту ошибку в консоли:

Blocked a frame with origin "https://www.facebook.com" from accessing a frame 
with origin "http://static.ak.facebook.com".  The frame requesting access has 
a protocol of "https", the frame being accessed has a protocol of "http". 
Protocols must match.

Есть ли опция, которую я могу подавать в API, который заставит ее работать с одними и теми же протоколами? FYI, основной сайт работает по протоколу HTTP (нет S).

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

У меня есть этот код у подножия моей страницы:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId  : ..., // App ID
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true,  // parse XFBML
            channel: '//...mychannel.../channel'
        });

        FB.Event.subscribe('auth.authResponseChange', function(fbResponse) {
            // function that logs in user
        });
    };

    // Load the SDK Asynchronously
    (function(d){
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        ref.parentNode.insertBefore(js, ref);
    }(document));
</script>
4b9b3361

Ответ 1

Для того, что стоит, мне удалось исправить эту проблему, перейдя на HTTPS (это то, что я должен был делать в любом случае).

Ответ 2

Если вы не загружаете javascript sdk async, вы можете увидеть эту ошибку много.

ссылаются на: https://developers.facebook.com/docs/javascript/quickstart

Кроме того, если вы используете какие-либо плагины Facebook через код iframe, убедитесь, что протокол url url соответствует.

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      appId      : 'YOUR_APP_ID',                        // App ID from the app dashboard
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel file for x-domain comms
      status     : true,                                 // Check Facebook Login status
      xfbml      : true                                  // Look for social plugins on the page
    });

    // Additional initialization code such as adding Event Listeners goes here
  };

  // Load the SDK asynchronously
  (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/en_US/all.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

Ответ 3

У меня была такая же проблема в моей среде разработки. Шаги для решения (не уверены, кто это сделал):

  • Выход из приложения.
  • Удалить все файлы cookie из браузера.
  • Войдите в FB как предполагаемый пользователь (не на страницу разработчика, а на страницу разрешений пользовательских приложений).
  • Удалите разрешение приложения с страницы разрешений FB.
  • Выход из FB.
  • Перезагрузите приложение и попробуйте войти.

Я бы не ответил в таком ответе вуду, если бы не потратил на это несколько часов, и буду ценить любое колдовство, чтобы вытащить меня из него.

Ответ 4

У меня была эта проблема...
мое решение:
переместите свой вызов facebook на статическую страницу...

(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/pt_BR/all.js#xfbml=1&appId=IDDDD";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

установить обратный вызов ajax:

try{setTimeout(FB.XFBML.parse);}catch(e){}

happy:)

Пример jquery:

$(document).ajaxComplete(function(){
            try{
                setTimeout(FB.XFBML.parse);
            }catch(ex){}
        });