Les scripts de scripts croisés uniquement en Chrome errent dans l'application Facebook iFrame sur FB.Login (…)

Dans Google Chrome (je suis sur 9.0.597.98), mon application Facebook iFrame utilisant Graph API / Javascript SDK tend toujours à lancer les deux erreurs JavaScript suivantes (voir ci-dessous) basées sur des scripts entre domaines, mais uniquement sur une seule page de l'application .

Cela se déroule dans une boucle de tentative sans fin sur le deuxième message. Après le laisser passer le lendemain, il a signalé un demi million de tentatives de ce matin!

L'appel FB utilisé est pour la connexion:

FB.login(function(response) { if (response.session) { // user successfully logged in } else { // user cancelled login } }); 

Dans Firefox et IE9, je n'obtiens pas ces erreurs. C'est précisément pour Chrome (peut-être WebKit). Ce qui est étrange, c'est que j'ai une deuxième page dans l'application qui utilise FB.Login et fonctionne avec Chrome en plus des autres navigateurs. J'ai lu quelque part que Safari a des exigences plus strictes sur les scripts entre domaines – et Chrome partage la même base de code.

Domains, protocols and ports must match (message d'erreur) Je crois être réellement satisfait parce que j'ai une autre page qui fonctionne avec l'appel FB.Login La seule autre différence que je vois entre ces deux messages est que l'argument de requête postmessage a une valeur différente pour chaque (En gras dans les messages). Cependant, il n'y a qu'un iFrame qui constitue une application Facebook, alors je me demande pourquoi deux valeurs différentes peuvent être utilisées l'une après l'autre. Je ne veux pas mener de réponses pour me concentrer sur cet élément, mais je voulais le signaler.

Des suggestions sont les bienvenues sur ce que je pourrais essayer de résoudre ces erreurs.

Messages de la console JavaScript Chrome:

Message 1 : JavaScript inactif tente d'accéder au cadre avec l'URL

Https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. Php% 23cb% 3Df3d15633dc% 26origin% 3Dhttp% 253A% 252F% 252Fsubdomain.example.com% 252Ff22a8befa% 26relation% 3Dopener% 26transport% 3D postmessage % 26frame% 3D f111baf6f4 % 26result% 3D% 2522xxRESULTTOKENxx% 2522 & perms = publish_stream% 2Coffline_access & return_session = 1 & sdk = joey & session_version = 3 du cadre avec l' URL http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . Les domaines, les protocoles et les ports doivent correspondre.

Message 2 : tentative de JavaScript dangereuse pour accéder au cadre avec l'URL

Https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. Php% 23cb% 3Df304d46e08% 26origin% 3Dhttp% 253A% 252F% 252Fsubdomain.example.com% 252Ff23ce8203% 26relation% 3Dopener% 26transport% 3D postmessage % 26frame% 3D fcd3637bc % 26result% 3D% 2522xxRESULTTOKENxx% 2522 & perms = publish_stream% 2Coffline_access & return_session = 1 & sdk = joey & session_version = 3 du cadre avec l' URL http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . Les domaines, les protocoles et les ports doivent correspondre.

J'ai également rencontré un problème où le getLoginStatus () n'a pas été appelé dans Chrome. J'ai essayé de l'appeler en charge de la page et après une action initiée par l'utilisateur sans succès.

Il s'est avéré que ce n'était pas un problème interdisciplinaire. L'appel a été bloqué par l'extension Un-Passwordise dans Chrome. Dès que j'ai désactivé l'extension, cela a fonctionné parfaitement, même sur le chargement de la page.

Plus d'informations sur ce problème ici: FB.getLoginStatus ne déclenche jamais la fonction de rappel dans le SDK JavaScript de Facebook

Pour mon cas, il s'est avéré que Chrome s'est plaint chaque fois que j'ai appelé la méthode FB.login(..) l'API JavaScript de FB.login(..) immédiatement sur la charge de la page ou du DOM.

Pour contourner ce problème sur Chrome, je place un bouton sur la page pour que l'utilisateur doit cliquer pour lancer le script de connexion. Cela fonctionne avec Chrome. C'est une solution de contournement mais bon pour moi pour l'instant.

Note: Pour la page secondaire que j'ai mentionnée dans ma question qui fonctionne, elle a déjà été configurée pour l'invite de connexion lancée par l'utilisateur.

L'ajout d'un fichier de canal peut aider ce problème. Voir la documentation de l'API Javascript: https://developers.facebook.com/docs/reference/javascript/

J'ai eu ce problème sur mon site, mais j'ai fini par utiliser l'ancienne version de FB.login.

À partir de Facebook FB.login page:

Depuis le 13 décembre 2011, le SDK JavaScript ne prend en charge que OAuth 2.0 pour l'authentification. La capacité d'activer OAuth 2.0 dans le SDK JS a été introduite pour la première fois en juillet. Toutes les applications ont été données jusqu'au 1er octobre 2011 pour tester et migrer. Avec cette modification, assurez-vous de remplacer response.session par response.authResponse . Pour demander des autorisations, vous devez utiliser la scope au lieu de perms . En savoir plus sur les changements spécifiques ici.