WedX - журнал о программировании и компьютерных науках

Ошибка HTTPS API входа в Facebook

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

Blocked a frame with origin "https://facebook.com" from accessing a frame 
with origin "https://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, который заставит его работать с теми же протоколами? К вашему сведению, основной веб-сайт работает по протоколу 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>

  • Я продолжаю проверять ответ на этот вопрос. Похоже, что недавнее обновление безопасности Chrome/Safari убило все взаимодействие с Facebook, когда оно связано с открытием модального окна в отдельном окне. Ошибка несоответствия протокола (см. выше) особенно досадна, поскольку разработчик не может контролировать используемые протоколы. 05.06.2013
  • Хм... Я проверил в Firefox, который также не работает, но он сообщает, что [16:51:47.802] Использование событий мутации устарело. Вместо этого используйте MutationObserver. @ fbstatic-a.akamaihd.net/rsrc .php/v2/y4/r/dePwLAaASOW.js:59 05.06.2013
  • Вы проверили настройки фб, которые вы там установили? 07.06.2013
  • Ошибки Facebook iFrame и ошибки Firefox Use of Mutation Events is deprecated происходят постоянно и, вероятно, не являются проблемой. Что делает ваш сайт, когда он вызывается потоком авторизации Facebook? 10.06.2013
  • У меня нет возможности проверить, но можете ли вы изменить эту строку js.src = "//connect.facebook.net/en_US/all.js"; на js.src = "http://connect.facebook.net/en_US/all.js";fo, заставив использовать протокол http для sciprt? 12.06.2013

Ответы:


1

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

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

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

<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>
06.06.2013
  • Я использую всплывающее отдельное окно для входа в facebook. Я не знаю, считается ли это плагином. Я знаю, что есть несколько iframe, встроенных в код SDK. Что бы это ни стоило, этот код (с соответствующими настроенными частями) присутствует в нижней части моего приложения. 06.06.2013
  • Извините, Сапфир, не видя вашего кода и того, как все устроено, я не могу помочь вам больше, чем дать вам указание обменять ваш JS SDK на асинхронную версию. 06.06.2013
  • Я добавил код, который находится внизу моей страницы, к вопросу вверху. 07.06.2013
  • Рекомендуется размещать JS SDK как можно ближе к тегу ‹body›. Порядок вещей. По сути, вы хотите, чтобы SDK загружался до того, как вы попытаетесь загрузить какие-либо социальные плагины, иначе будут ошибки. В дополнение к этому вы можете написать свои плагины в DOM из асинхронного режима и использовать xFBML для их инициализации после загрузки SDK. 07.06.2013

  • 2

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

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

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

    19.07.2013
  • Конечно. Это была моя проблема. Легко проверить - загрузите браузер в режиме инкогнито/приватном режиме. если ошибки исчезнут, то, похоже, это указывает на проблему с файлами cookie/сеансами. 04.05.2016

  • 3

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

    4

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

    04.10.2013
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: wedx@cp9.ru