J'ai une application Facebook qui utilise le Facebook Connect.js .
J'exécute mon application sur HTTPS. Tout le contenu du site est livré à partir de https://
à l'exception de certains contenus qui doivent être inclus dans le Connect.js
de Facebook.
Le problème est que je reçois des messages d'avertissement indiquant qu'il y a des éléments non sécurisés dans la page.
J'ai vérifié quels scripts étaient chargés à l'aide de l'onglet Outils de développement/Réseau de Chrome pour voir quels fichiers étaient chargés et d'où.
Le seul fichier que je peux voir qui est en cours de chargement sur HTTP et non sur HTTPS est un fichier appelé http://static.ak.facebook.com/connect/canvas_proxy.php
.
Comment puis-je forcer ce fichier à utiliser HTTPS?
Donc, cela vous donnerait le même lien de protocole:
FB._https = (window.location.protocol == "https:");
Je suis tombé sur ce problème il y a quelques jours. Mon application entière utilisait HTTPS et mon problème concernait uniquement le chargement des images de profil via HTTP ... Mon correctif rapide et compliqué consistait à remplacer manuellement tous les noms de domaine des images de profil. Par exemple,
str_replace('http://profile.ak.fbcdn.net','https://fbcdn-profile-a.akamaihd.net',$user['pic_square']);
Vous devrez vérifier et voir l'URL de vos photos de profil. Je suppose qu'ils ne viennent pas exactement du même endroit. Affichez l'URL de votre propre photo de profil et remplacez-la par celle que j'ai sous https://fbcdn-profile-a.akamaihd.net
.
Après avoir examiné plus en profondeur la documentation Facebook :
Si vous souhaitez qu'une image soit renvoyée via une connexion sécurisée, vous pouvez définir l'argument return_ssl_resources sur 1: https://graph.facebook.com/4/picture?return_ssl_resources=1 .
J'ai trouvé un paramètre supplémentaire appelé return_ssl_resources
et, une fois passé avec true
, il renvoie les images de profil à l'aide de HTTPS.
$fql = "SELECT uid, name, pic_square FROM user WHERE uid=me()";
$param = array( 'method' => 'fql.query', 'query' => $fql, 'return_ssl_resources'=>1);
$fbuser = $facebook->api($param);
Cela a fonctionné comme un charme, et j'ai cessé de recevoir les avertissements de sécurité mixtes. J'espère que ça aide!
Pour ajouter à Ralph Holzmann et Simon Bächler, ce qui suit est un correctif encore plus difficile à obtenir pour quand FB ._ https seul ne fait pas l'affaire;
FB._https = (window.location.protocol == "https:");
FB.init({
...
});
if (FB._https && window == window.parent) {
if (FB._domain && FB._domain.staticfb && FB._domain.https_staticfb)
FB._domain.staticfb = FB._domain.https_staticfb;
}
Voir aussi FB.Arbiter.inform () {... FB.getDomain ((d? 'Https _': '') + 'staticfb', true) ...} où d = window! = Window.parent && ... à partir de 2012-février-10.
Il semble que FB._https ait été remplacé par:
FB._secure = (window.location.protocol == "https:");
J'avais un problème similaire (les commentaires fb ne fonctionnaient pas en mode sécurisé). Cela résout le problème - il suffit de référencer le fichier javascript via https:
<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>
Ou ne spécifiez pas le schéma qui fonctionnera pour les deux:
<script type="text/javascript" src="//connect.facebook.net/en_US/all.js"></script>
Cela semble être causé par ce bug de Facebook .
Voir aussi ce forum post .
Ce bogue a été marqué comme résolu le 3/16, mais j'observe toujours les requêtes non https adressées à canvas_proxy.php. Espérons que cela sera réglé très bientôt ...
Sur une note de bas de page, si vous avez des déclarations de type doc sur votre page HTML comme ci-dessous, la référence à " http://www.w3.org " peut également afficher l'avertissement de contenu erreur dans Internet Explorer.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">