Аутентификация 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');
//...
});