Аутентификация 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>

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

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

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


person I'll-Be-Back    schedule 04.11.2011    source источник
comment
Вашему сценарию препятствует политика того же происхождения — en.wikipedia.org/wiki/Same_origin_policy   -  person Rob W    schedule 04.11.2011
comment
Итак, каков обходной путь? я использую Хром   -  person I'll-Be-Back    schedule 04.11.2011
comment
Разговаривая с другими, которые использовали API Facebook в прошлом, и что было упомянуто в некоторых ответах ниже, кажется, что тестирование с локального хоста имеет проблемы. Попробуйте настроить тестовый сервер, отличный от localhost.   -  person ToddBFisher    schedule 03.01.2012
comment
Я также вижу эту ошибку с кнопкой Google +1. Это специфично для хрома. stackoverflow .com/questions/5660116/   -  person sdolgy    schedule 11.01.2012
comment
Известная проблема Chrome. Не тратьте время, как я, пытаясь исправить это :)   -  person grantwparks    schedule 03.03.2012


Ответы (7)


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

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

person user1122069    schedule 03.01.2012
comment
Вы можете выполнять отладку в localhost. Вы не можете публиковать ссылки на изображения в localhost для публикации на временной шкале, так как Imagehandler Facebook ищет онлайн-изображение. Отображение контента Facebook и использование других функций Facebook отлично работает в localhost. - person curly_brackets; 19.12.2012

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

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

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

person Sajith Amma    schedule 16.12.2011

Вы можете использовать только то же доменное имя, под которым вы зарегистрировались в приложениях 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',
person Anto    schedule 11.01.2012

Возникла эта ошибка, когда я реализовал fileglu, и это может быть CORS ошибка, поскольку вы работаете с локального хоста. Попробуйте запустить на 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 для получения дополнительной информации.

person Alvin K.    schedule 04.11.2011

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

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

127.0.0.1 local-dev.mydomain.com local-dev

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

person technomage    schedule 25.01.2012

В моем случае ошибка была вызвана подобным виджетом, который был загружен с помощью 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');
  //...
});
person Dmitriy    schedule 02.08.2013