2013-06-18 9 views
9

Sto correndo un errore molto simile a questo: Facebook Login API HTTPS Issue.Problema di https su Facebook come pulsante: mancata corrispondenza del protocollo da http e https

Ho un sito Web che utilizza l'autenticazione di Facebook, l'accesso di Facebook non è un problema. Ma il Facebook come pulsante ottenere turbato quando stato cliccato (test di fallire su Chrome, Safari, Firefox, in OSX), il messaggio di errore è:

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. 

Ho cercato dappertutto e trovare soluzioni.

Sembra che quando si fa clic sul pulsante Mi piace, si apre un fotogramma dal callback https://facebook.com e si prova a richiedere http://static.ak.facebook.com causando così la mancata corrispondenza del protocollo ?!

Ecco quello che ho messo subito dopo <body> tag

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    // init the FB JS SDK 
    FB.init({ 
     appId  : 'appid',      // App ID from the app dashboard 
     channelUrl : '//mydomain/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/zh_TW/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

e il file di canale http://mydomain/channel

<script src="//connect.facebook.net/zh_TW/all.js"></script> 

Ed ecco come io uso il-pulsante mi piace

<div class="fb-like" data-href=url data-send="true" data-width="450" 
data-show-faces="true"></div> 

ha davvero bisogno aiuto per favore!

+0

hai provato ad aggiungere il protocollo allo script src? – Mangiucugna

+1

se si utilizza // invece di http o https, si supponga di attivare la richiesta con il protocollo corrispondente al protocollo del browser, assicurarsi che tutti gli URL dei codici inizino solo con // eg src = "// yoursite.com" – talsibony

+0

Hai provato la versione iframe del pulsante mi piace? – Jacob

risposta

4

Nel tuo primo tag script si può dire Facebook esplicitamente l'utilizzo di HTTPS ...

aggiungere la riga:

FB._https = (window.location.protocol == "https:"); 

inserirlo prima della chiamata di funzione FB.init, appena al di sotto o al posto del commento:

// init the FB JS SDK 

Ciò garantirà che i server di Facebook caricino le librerie richieste fino alla fine su https.

Spero che questo aiuti.

+1

Devi essere il santo salvatore. Questo problema esiste ancora, ma grazie a te è andato via! – Zh4rsiest

+0

Ha - felice di aiutare, triste sentire questo è ancora un problema quasi 2 anni dopo. Sono contento di non fare molto altro per gli FB! – steve

0

Rivedere il codice js su Facebook ci sono più URL contenenti le stringhe hard coded per

http://static .../rsrc.php 

è possibile questi sono i file scatenanti l'errore.

Questo potrebbe essere qualcosa che Facebook deve aggiornare.

Nota a margine, potrebbe essere possibile scaricare il file js da Facebook e memorizzarlo sul server e rimuovere la stringa http hard codificata. Vorrei testarlo ulteriormente ma sono al telefono al momento.

Problemi correlati