9
votes

Bouton Partager Facebook ne s'affiche pas jusqu'à nouvel ordre

La semaine dernière, j'ai ajouté des boutons Facebook et Twitter partager sur My Rails App. Je pensais qu'ils travaillaient bien, mais il semble qu'ils n'étaient pas chargés de manière fiable et nécessitaient un rafraîchissement pour les faire montrer. Je pensais que c'était un problème de Turbolinks, car ces choses sont souvent si j'ai installées le 'JQuery-Turbolinks'gem. Ce n'est pas un problème de Turbolinks.

Après avoir regardé autour de moi, j'ai trouvé des réponses comme Celui-ci et en ajoutant twttr.widgets.load (); à la fin de ma fonction Twitter a résolu ce problème, je n'avais pas de chance avec obtention fb.xfbml.parrse (); pour faire le Facebook Bouton de partage pour charger sans rafraîchir. Sur Cette Facebook Dev Page Il ne liste pas le partage Bouton comme l'une des choses qui peuvent être corrigées avec ce code.

Mon code, qui est partial, est la suivante: xxx


7 commentaires

Que voulez-vous dire "nécessitait un rafraîchissement?". Si vous voulez dire qu'un onglet de navigateur est parti ouvert à partir de ce que votre déploiement ne s'est pas mis à jour automatiquement après le déploiement, il n'y a aucune raison pour laquelle il devrait (si vous ne mettez spécifiquement spécifiquement dans certains JavaScript pour vous rafraîchir tout ou partie de la page à intervalles réguliers) .


Non, non, je veux dire la première fois que vous chargez une page, il n'a pas le bouton Facebook Partager. Si vous cliquez sur Actualiser, il le fait. À travers toutes les pages avec le lien. Comme indiqué dans la réponse liée et pour de nombreux problèmes avec JS Trouver et remplacer des scripts comme celui-ci.


J'ai le même problème. Ouvrez la page et Twitter et FB DIV sont vides. Actualiser la page, et là ils sont. Beaucoup de solutions supposées qui ne changent rien. Ai-je besoin d'un morceau de JS en cours d'exécution qui les tire juste à plusieurs reprises jusqu'à ce qu'ils se chargent?


Désactiver les Turbolnks dans les liens vers la page a résolu le problème pour moi. Si vous les avez sur beaucoup / la plupart des pages, mieux pour désactiver les Turbolinks sur l'application entière.


Je suppose que c'est une solution, mais cela semble très destructeur, en particulier lorsque le correctif du bouton Twitter a fonctionné. J'ai juste besoin d'un tumeak JavaScript similaire pour le FB One Sûrement? Affaires insatisfaisantes tout autour.


Pouvez-vous montrer un exemple en direct du problème?


MINILEGIATS.COM/MINIATURES/637 par exemple.


5 Réponses :


1
votes

Pourquoi ne pas essayer un bouton de partage de côté client plutôt que le bouton Partager le côté serveur. Le côté serveur n'est nécessaire que si vous allez faire une transformation supplémentaire après avoir rendu le côté serveur. Il est probable que vous n'avez pas besoin de rendre sur le serveur.

<a href="https://www.facebook.com/sharer/sharer.php?u={$pageURLValue}" target="_blank">
  Share on Facebook
</a>


2 commentaires

Je vais les tester à nouveau mais comme je me souviens de cela, ils ne font pas ce que je veux. Le code que j'utilise vous donne la possibilité de choisir où partager (chronologie / ami / groupe) et le paramètre de confidentialité. Il ouvre également une belle petite popup soignée plutôt qu'une nouvelle fenêtre. Il correspond au comportement du code Twitter. Je vais le tester cependant.


Vous remarquerez que l'URL Facebook a l'URL partagé modifie celle-ci à une variable dans votre code côté serveur et transmettez-vous dans l'URL que vous souhaitez partager. C'est tout ce dont vous avez besoin pour le faire fonctionner. Cela va faire une pop up chaque fois que l'utilisateur doit se connecter. Si l'utilisateur est déjà connecté à Facebook, il ne peut pas leur demander de vous connecter.



8
votes

C'est parce que parfois votre objet FB n'est même pas défini, et votre fonction FB.XFBML.PARSE () est appelée. Vous devez effectuer des appels vers l'objet FB lorsqu'il est initialisé. Donc, votre code change à cet effet:

<script>
   (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/en_US/sdk.js#xfbml=1&version=v2.0";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

     window.fbAsyncInit = function(){  // this gets triggered when FB object gets initialized
            console.log("FB Object initiated");
            FB.XFBML.parse(); // now we can safely call parse method
       };

</script>


9 commentaires

Il ne se charge toujours pas avant d'actualiser.


@Worldofproper pouvez-vous s'il vous plaît fournir un lien vers cette page


Désolé il y a quelque chose qui ne va pas sur ma fin. Juste le tester.


Voici un exemple de ce code ne fonctionnant qu'après rafraîchir MinIlegions.com/collections/1139


Il me montre pour moi première fois dans tous les navigateurs. Il existe également une erreur de frappe dans votre JavaScript `twttr.widgets.load ()` `, il devrait être Twitter.


Je ne sais pas quoi dire maintenant. Je travaille en chrome. Seulement après rafraîchissement dans Safari et dans Firefox, il ne se charge que avant de rafraîchir une partie du temps. Vous avez travaillé dans tous les navigateurs? Quant aux Twttr.Widgets.load, c'est le code qui twitter elle-même recommander dev.Twitter.com/discussions/ 890


Cela fonctionne pour moi dans Firefox et Chrome, vérifiez votre console Firebug pour corriger les erreurs JavaScript que vous pourriez getter votre navigateur.


Safari rapporte cette erreur "bloqué un cadre avec origine" MinileGions.com "d'accéder à un cadre avec l'origine" facebook.com ". Le cadre en cours d'accès SET" DOCUMENT.DOMAIN "sur" Facebook.com ", mais le cadre qui demande l'accès pas. Les deux doivent définir "document.domain" sur la même valeur pour permettre l'accès. " Firefox rapporte "ID d'application non valide: doit être une chaîne numérique ou numérique représentant l'ID d'application." et "la" racine FB "DIV n'a pas été créée, création automatique".


Nous avons attribué la prime depuis que cela fonctionne à Chrome, mais je devrai continuer à travailler sur une solution pour Firefox et Safari. Merci.



0
votes

J'étais stratifié avec le même problème - j'ai eu une pop up div avec une iframe pointant vers une page HTML contenant le bouton Twitter. J'ai eu la pop-up caché du début. Cela provoque apparemment le bouton Twitter pour ne pas rendant .. Au lieu de le cacher avec l'affichage: Aucune / Visibilité: Caché Placez la fenêtre lointaine loin (à gauche: -10000px) et réinitialisez la position gauche lorsque vous souhaitez afficher la popup .. J'espère que cela pourrait aider quelqu'un ..


0 commentaires

0
votes

J'ai intégré un widget de page Facebook sur mon site Web qui était un spa angulaire et j'avais le même "besoin d'un rafraîchissement", car j'avais mis à tort le script dans une page de vue parent contenant "index.html", mais je «D Placez la DIV intégrée dans une autre sous-vue spécifiquement sur une page« social_media.html ». "index.html" chargé et a tiré le script lors de la première visite à n'importe quelle page de mon site web, mais à ce stade n'avait aucune visibilité de la DIV sur ma vue non utilisée et non utilisée "social_media.html", donc quand la L'utilisateur finit par traverser un lien qui utilise la sous-vue de "social_media.html", "index.html" n'a pas été "rechargé" et n'a donc pas réaffirmé le script à moins que je ne clique à rafraîchir. Pour résoudre ce problème, je viens de mettre le script et divis tout dans le même "social_media.html" pour charger et tirer à la fois sur toutes les demandes de "social_media.html" à charger comme une page de vue. Remarque: j'ai aussi dû ajouter l'approche de Dhruvpathak aussi.


0 commentaires

0
votes

juste une fonction d'appel fb.xfbml.parrse (); dynamiquement au lieu de recharger la page.


0 commentaires