Ответ 1
Для того, что стоит, мне удалось исправить эту проблему, перейдя на HTTPS (это то, что я должен был делать в любом случае).
На веб-сайте, на котором я работаю, есть опция входа в 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 (нет 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>
Для того, что стоит, мне удалось исправить эту проблему, перейдя на HTTPS (это то, что я должен был делать в любом случае).
Если вы не загружаете javascript sdk async, вы можете увидеть эту ошибку много.
ссылаются на: https://developers.facebook.com/docs/javascript/quickstart
Кроме того, если вы используете какие-либо плагины Facebook через код iframe, убедитесь, что протокол url 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>
У меня была такая же проблема в моей среде разработки. Шаги для решения (не уверены, кто это сделал):
Я бы не ответил в таком ответе вуду, если бы не потратил на это несколько часов, и буду ценить любое колдовство, чтобы вытащить меня из него.
У меня была эта проблема...
мое решение:
переместите свой вызов 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){}
happy:)
Пример jquery:
$(document).ajaxComplete(function(){
try{
setTimeout(FB.XFBML.parse);
}catch(ex){}
});