Проблема HTTPS API входа в Facebook

на веб-сайте, над которым я работаю, есть опция входа в 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 (нет).

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

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

<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>

4 ответов


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

см.:https://developers.facebook.com/docs/javascript/quickstart

кроме того, если вы используете какие-либо плагины Facebook через код iframe, убедитесь, что протокол src 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>

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

  1. выйти из приложения.
  2. удалить все куки из браузера.
  3. войдите в FB как предполагаемый пользователь (не на страницу разработчика, а на страницу разрешений приложения пользователя).
  4. удалить разрешение приложения со страницы разрешений FB.
  5. выход из FB.
  6. перезагрузите приложение и попробуйте войти в систему.

Я с этой проблемой...
мое решение:
переместите вызов 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){}

счастливый :)

пример jquery:

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

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