2013-06-18 13 views
9

Występuje błąd bardzo podobny do tego: Facebook Login API HTTPS Issue.Facebook podobny do przycisku https: niezgodność protokołu z http i https

Posiadam stronę internetową korzystającą z uwierzytelniania facebook, logowanie na Facebooku nie stanowi problemu. Ale Facebook podobnie przycisku dostać zmartwiony, gdy został wciśnięty (test nie powiedzie się na Chrome, Safari, Firefox, w OSX), komunikat o błędzie jest:

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. 

Rozglądałem całym i znaleźć żadnego rozwiązania.

Wygląda na to, że po kliknięciu przycisku podobnego, pojawia się ramka z połączenia zwrotnego https://facebook.com i próba żądania http://static.ak.facebook.com powoduje niezgodność protokołu ?!

Oto co mogę umieścić tuż po <body> tagu

<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> 

i plik kanału na http://mydomain/channel

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

a oto jak używać takiego przycisku

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

naprawdę potrzebuje prosimy o pomoc!

+0

Czy próbowałeś dodać protokół do skryptu src? – Mangiucugna

+1

jeśli używasz // zamiast http lub https, to przypuśćmy, że chcemy wyzwolić żądanie z protokołem zgodnym z protokołem przeglądarki, upewnij się, że wszystkie twoje adresy URL zaczynają się od // np. Src = "// twoja_witryna.com" – talsibony

+0

Czy wypróbowana wersja podobnego przycisku iframe? – Jacob

Odpowiedz

4

W pierwszym tagu skryptu można powiedzieć Facebooka jawnie użyć HTTPS ...

Dodaj linię:

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

dodać go przed wywołaniem funkcji FB.init, tuż poniżej lub w miejscu komentarza:

// init the FB JS SDK 

Zapewni to, że serwery Facebooka wczytują wszystkie wymagane biblioteki do końca przez HTTPS.

Mam nadzieję, że to pomoże.

+1

Musisz być świętym zbawcą. Ten problem nadal istnieje, ale dzięki tobie odszedł! – Zh4rsiest

+0

Ha - z przyjemnością pomogę, smutno słyszeć, że jest to nadal kwestia prawie 2 lata później. Cieszę się, że nie robię już zbyt wiele FB dev! – steve

0

Przeglądając kod js na Facebooku istnieje wiele adresy URL zawierające zakodowanego ciągi dla

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

to możliwe, to są pliki wyzwalające błąd.

To może być coś, co Facebook musi zaktualizować.

Na marginesie, może być możliwe pobranie tego pliku js z serwisu Facebook i zapisanie go na serwerze oraz usunięcie zakodowanego ciągu http. Sprawdziłbym to dalej, ale w tej chwili jestem w swoim telefonie.

Powiązane problemy