Аутентификация Facebook - Небезопасный JavaScript пытается получить доступ к кадру с URL-адресом

Я пытаюсь внедрить систему входа Facebook на свой сайт.

Пока он пытается подключиться к facebook, я получаю сообщение об ошибке из журнала консоли:

Unsafe JavaScript attempt to access frame with URL https://s-static.ak.fbcdn.net/connect/xd_proxy.php?xxxxxxxxxxxxxxxx

Я использую JavaScript SDK

Я добавил это в тег body:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'xxxxxxxxxxxxxx',
            status     : true, 
            cookie     : true,
            xfbml      : true
        });
    };
    (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
    </script>

Кнопка входа в Facebook:

<div class="fb-login-button"  data-perms="email">Login with Facebook</div>

Я тестирую с localhost - я зарегистрировал свой сайт в приложениях для разработки facebook (URL-адрес сайта: http://localhost)

Как решить эту проблему? или я должен использовать PHP SDK?

Изменить: та же проблема, когда я загружался на сервер с общественным достоянием.

Ответ 1

Ошибка, которую вы видите там, является нефатальной ошибкой. Для этого нет обходного пути, так как ваш браузер сообщает вам, что не стоит загружать JavaScript из иностранных доменов. Просто проигнорируйте это сообщение и посмотрите в другом месте на наличие ошибок, если ваши сценарии не запускаются. Саджит также прав, что вы не можете отлаживать локальный хост.

См. также, "Небезопасный JavaScript пытается получить доступ к фрейму с URL-адресом..." ошибка постоянно генерируется в инспекторе веб-браузера Chrome

Ответ 2

Убедитесь, что эта строка находится в верхней части страницы (она работает для меня):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">

Ответ 3

Невозможно протестировать всю интеграцию Facebook с помощью домена localhost. Вам нужно разместить свой script в любом общедоступном домене и обновить URL-адрес на странице настроек приложения-разработчика. Ошибка безопасности, отображаемая на JavaScript, связана с этим доступом к локальному хосту с помощью скриптов facebook

Ответ 4

Вы можете использовать только то же имя домена, в котором вы зарегистрировались в приложениях Facebook.

1. You need a public domain name (www.example.com).
2. You need to register with Facebook apps.
3. Get the 2 keys from the Facebook and use in the code:
    appId      : 'xxxxxxxxxxxxxx',

Ответ 5

Была ли эта ошибка, когда я внедрил fileglu, и это может быть CORS, так как вы запускаете localhost. Попробуйте запустить на Facebook, и вы можете заменить нижнюю половину кодом ниже:

(function() {
  var e = document.createElement('script');
  e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js#appId=<your-app-id>&xfbml=1';
  e.async = true;
  document.getElementById('fb-root').appendChild(e);
}());

У меня также был Oauth 2.0 и пользовательский канал включен на моей странице FB.init(). Подробнее см. http://fbdevwiki.com/wiki/FB.init.

Ответ 6

Вы можете настроить свою локальную машину на предмет наличия домена, который требуется facebook.

В Linux или OSX добавьте запись в /etc/hosts; на окнах, отредактируйте c:\windows\system32\drivers\etc\hosts. Добавьте запись, подобную этой:

127.0.0.1 local-dev.mydomain.com local-dev

Где "mydomain.com" - это домен, с которым зарегистрирован ваш идентификатор приложения FB.

Ответ 7

В моем случае ошибка была вызвана таким же виджета, который был загружен с помощью addthis на сайте, на котором уже было приложение FB.

Похоже, проблема была в конфликте с несколькими fb js-sdk.

Таким образом, решение может быть заменено на addthis facebook, например wdiget, на родной facebook, например на виджет.

У меня также была другая ошибка в webkit, когда js-sdk не был загружен. Я исправил это, заменив window.fbAsyncInit на jQuery.getScript(). В конце концов, исправлена ​​ошибка "Небезопасная попытка JavaScript для доступа к фрейму с URL".

Вот пример:

$.ajaxSetup({ cache: true });
$.getScript('//connect.facebook.net/en_UK/all.js', function() {
  FB.init({
    appId: 'your app id',
    cookie: true,
    xfbml: true,
    oauth: true,
    status: true
  });
  // Trigger custom event so we can use it to run init dependent actions in different places.
  $(document).trigger('FBSDKLoaded');
  //...
});