FB fonction init donne la mauvaise version d'erreur
Je suis en utilisant le Facebook JS sdk, et j'ai créé une nouvelle Application aujourd'hui.
Tout est configuré correctement.
À l'aide de la fonction init comme:
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxx', //App ID
status : false,
version: 'v2.0',
cookie : true,
xfbml : false //parse XFBML
});
};
(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/pl_PL/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
mais j'ai une erreur:
"Erreur non interceptée: init pas appelé avec la version valide"
A essayer aussi d'autres versions comme: 2.1, 2.2 et toujours pas de chance.
Ce que je fais mal ici?
- La chose étrange est-ce le code donné par Facebook! Comme vous pouvez le voir ici: developers.facebook.com/docs/facebook-login/login-flow-for-web/...
- stackoverflow.com/a/33857401/1465973
- Comment est-ce ENCORE un problème???
- PS. Ils ont depuis ajouté
https://
explicitement à lajs.src
URL
Vous devez vous connecter pour publier un commentaire.
**Avertissement - C'est purement de la spéculation. Semble avoir résolu mon problème.
J'ai eu ce problème sur un projet récent. Je pense que c'est un problème de latence. Le Facebook SDK exige que
<div id="fb-root"></div>
être sur la page. Ce devrait être la première chose après l'ouverture de la balise body. Après cela, vous pouvez voir votre code d'initialisation.Pour moi, cette question n'a pas été uniforme. J'ai l'occasion de voir le bug, et parfois je ne le seraient pas. Donc, ma conclusion que c'était un problème de latence. Si le SDK ne peut pas trouver le
fb-root
, alors il faut en créer un. Ici, c'est où je crois que le problème de latence existe.Essayez d'ajouter ce juste après l'ouverture du corps de la balise, mais avant que votre
FB.init({});
.Cela semble avoir résolu le problème pour moi et j'espère aider les autres. Le v1.0 la documentation explique la raison pour
fb-root
, mais la v2.0 docs font aucune mention de l'élément, sans doute parce que le script d'initialisation vais l'ajouter pour vous si elle ne le trouve pas.FB.init({})
être appelée avant ou après le fb-root est ajouté à la page? Est votre JS juste avant la balise de fermeture body?J'ai eu de travail en utilisant all.js au lieu de sdk.js.
Dans votre cas, il devrait ressembler à:
au lieu de
Ajouter
&version=v2.0
js.src, comme suit:Ce problème en proie à moi pendant un moment. J'ai essayé de nombreuses idées énumérées ici comme le changement de numéro de version et le déplacement/suppression de la
fb-root
.Qu'est-ce que finalement ce qui marche bien pour moi, c'est de supprimer l'ensemble de l'
window.fbAsyncInit
de la fonction et de spécifier leinit
propriétés dans la table de hachage desdk.js
. Par exemple:Bien sûr, vous pouvez omettre un paramètre pour utiliser la valeur par défaut.
Je ne trouve pas cette approche documentée n'importe où si vous l'utilisez à vos propres risques. Heureusement, j'ai eu la mise à niveau d'un ancien site de
v1.x
àv2.x
et il a utilisé cette technique lors du chargement deall.js
.j'ai remplacé cette
avec cette
et travaillé 🙂
C'était la seule solution qui permettrait d'éliminer l'erreur de 100% du temps.
Vous pouvez recréer cette erreur par la suppression de votre FB.init. Ce qui confirme bien que l'sdk.js avait été chargé, et le FB de l'espace de noms existé, FB.init n'avait pas été appelé par le temps, nous avons essayé d'utiliser FB méthodes d'ailleurs dans nos scripts.
Nous devons nous assurer que FB.init a été appelé. J'ai utilisé une approche similaire à ce réponse:
Puis, d'ailleurs, que toute référence à FB peut être fait comme ceci:
Ce qui se passait pour moi aussi avec une grande incohérence. Quelque part mon intuition dit, il est obtenu d'être un problème de synchronisation. Plus de débogage, trouvé une erreur dans la console développeur manuellement par l'exécution de "
FB.login()
". L'erreur a dit, "init pas appelé en cours de validité avec la version".Dans mon cas, j'étais en ajoutant
//connect.facebook.net/en_US/sdk.js
comme une balise script dans l'en-tête de la page html et lewindow.fbAsyncInit
est venu dans un autre fichier, juste après que. Cette pointu pour moi comme un problème de timing et donc j'ai échangé ces 2 balises de script. Maintenant, une fois que j'avais compriswindow.fbAsyncInit
avant, y compris//connect.facebook.net/en_US/sdk.js
, le problème avait disparu. Espérons que cela aide les autres.Essayez ce code:
J'ai remarqué que quand je suis en train d'essayer d'obtenir des infos fb n'est toujours pas initialisé.
Je l'ai corrigé en ajoutant mon code d'initialisation à la fin de l':
J'ai résolu cette erreur par le chargement du script sur le document prêt au lieu de document de la charge.
Par exemple, ce qui a donné l'erreur d'environ 10% du temps:
alors que cela fonctionne tout le temps:
Regarder quand vous appelez FB api après init. Init semble synchrone, mais la fenêtre.fbAsyncInit n'est pas, de sorte que vous avez à attendre son exécution. Mon exemple à reproduire est dans phonegap plateforme de navigateur, mais après j'ai vérifié le facebook plugin code je suis sûr qu'il peut être reproduit en javascript et de l'environnement.
C'est mon code qui déclenche l'erreur:
Voici comment je l'ai corrigé:
Je suis sûr que le code suivant va le jeter dans le navigateur, mais je n'ai pas le temps de le vérifier:
Pour single page applications (Réagir dans mon cas)
En single page applications que vous avez moins de contrôle sur l'ordre dans lequel le code sera exécuté. Parfois, le script sera chargé par le temps que vous appelez votre code, parfois pas.
Pour le faire fonctionner indépendamment du fait que le facebook script a déjà chargé ou pas, je fais une vérification si le
FB
variable globale est déjà défini au moment de l'exécution du code. Si oui, je viens de faire un normal initialiser, sinon je fournir la fonction de rappel.C'est mon code:
Dans mon fichier html je viens d'offrir le script donné par facebook, et dans mon code, je peux appeler
initializeFacebookSdk()
où et quand je veux:Nous utilisons notre propre API qui fait cela:
J'ai eu le même problème quand j'ai essayé d'incorporer un simple Facebook post dans un article que j'ai écrit.
Quand j'ai débogué le Facebook
sdk.js
j'ai vu que l' .getVersion retourné "undefined" et donc pas rendu le widget.Apparemment, Facebook ne peut pas gérer passant requête de paramètres séparés par des
&
au lieu de&
lors du chargement de lasdk.js
. J'avais changé mon code pour&
pour la validation des raisons.sdk.js:formatted
? Est-ce un plugin chrome?L'erreur qui s'est passé à chaque fois que j'ai redirigé vers une page Edge (Navigateur) qui a eu un fb-page plugin.
Si j'ai rafraîchi la page de travail. Si j'y suis arrivé par le biais d'un lien hypertexte ce serait jeter de l'erreur.
Fixé par l'ajout de
sdk.js?d=" + new Date().toISOString();
pour le script.Vous utilisez le cordova-plugin-facebook4 plugin, et c'est un message d'erreur personnalisé qui signifie que l'initialisation n'a pas fini d'lorsque le facebook de l'api de la fonction est appelée. Car le plugin ne permet pas de donner une
waitForInitialize
utiliser setTimeout et puis de réessayer la méthode de l'api est le meilleur pari.UNIQUE COMPRENNENT:—assurez-vous que le Facebook de l'API JavaScript n'est pas inclus plus d'une fois sur votre page.
(Ce qui était mon problème)
Assurez-vous que vous utilisez
https://
dans l'URLJe ne l'aurais pas cru ce soit, mais la seule différence entre ce que Facebook a leur actuel des exemples de code et ce que j'ai est
https://
au lieu de//
pour l'url.La mise à jour https://semble avoir fixé pour moi et je ne peut pas reproduire l'erreur.
Aussi, si vous êtes en train de faire toutes les vérifications d'ailleurs dans ton code pour voir si
FB
est défini assurez-vous de vérifierif (window.FB)
et pasif (FB)
ou vous obtiendrez une erreur.Si vous utilisez la machine, vous devez ajouter quelque chose comme ceci:
J'ai eu le même problème, et je crois que j'ai trouvé la cause!
Cause
Dans mon cas, nous avons été l'injection de FB SDK de façon dynamique pour le site de notre client. Cependant, certains de nos clients ont déjà été ajoutées FB SDK via d'autres plugins. Ces plugins ont différentes app id et la version.
Donc, en fonction de la latence de certains plugins appel
init
avant/après le nôtreSolution
Si vous êtes le propriétaire du site où vous êtes l'injection du kit de développement logiciel, assurez-vous qu'aucuns autres plugins sont l'injection de FB SDK et de l'appel de
init
différente de la version et de l'id de l'applicationSi vous ne possédez pas le site, alors au moins essayer d'injecter le SDK avant tout le monde et préfère
not async
J'ai aussi signalé le même pour FB. Ils ont dit de ne pas appeler init séparément, passer init params directement dans la règle. J'ai joint le code que j'utilise:
Il y a une erreur de la version: 'v2.0',
Ce n'est pas un code valide