Facebook rappel a commencé en ajoutant `` soulignement de hachage de l’URL de renvoi
Est-ce que quelqu'un sait pourquoi ? Quelle est la solution ?
Facebook rappel a commencé en ajoutant `` soulignement de hachage de l’URL de renvoi
Est-ce que quelqu'un sait pourquoi ? Quelle est la solution ?
via Facebook de la Plate-forme de Mises à jour:
Changement de Session Comportement de Redirection
Cette semaine, nous avons commencé l'ajout d'un fragment #_=_ à la redirect_uri quand ce champ est laissé vide. Veuillez vous assurer que votre application peut gérer ce comportement.
Pour éviter cela, réglez le redirect_uri dans votre url de connexion à la demande comme suit: (en utilisant Facebook php-sdk)
$facebook->getLoginUrl(array('redirect_uri' => $_SERVER['SCRIPT_URI'],'scope' => 'user_about_me'));
Mise à JOUR
Le dessus est exactement comme la documentation dit à résoudre ce problème. Cependant, Facebook est documenté solution ne fonctionne pas. Songez à laisser un commentaire sur le Facebook de la Plateforme de Mises à jour du blog et de suivre ce bug pour obtenir une meilleure réponse. Jusqu'alors, ajoutez à votre balise head pour résoudre ce problème:
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
window.location.hash = '';
}
</script>
Ou une version plus détaillée de la solution (merci niftylettuce):
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
if (window.history && history.pushState) {
window.history.pushState("", document.title, window.location.pathname);
} else {
// Prevent scrolling by storing the page's current scroll offset
var scroll = {
top: document.body.scrollTop,
left: document.body.scrollLeft
};
window.location.hash = '';
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scroll.top;
document.body.scrollLeft = scroll.left;
}
}
</script>
TL;DR
if (window.location.hash == '#_=_'){
history.replaceState
? history.replaceState(null, null, window.location.href.split('#')[0])
: window.location.hash = '';
}
Version complète avec des instructions étape par étape
// Test for the ugliness.
if (window.location.hash == '#_=_'){
// Check if the browser supports history.replaceState.
if (history.replaceState) {
// Keep the exact URL up to the hash.
var cleanHref = window.location.href.split('#')[0];
// Replace the URL in the address bar without messing with the back button.
history.replaceState(null, null, cleanHref);
} else {
// Well, you're on an old browser, we can get rid of the _=_ but not the #.
window.location.hash = '';
}
}
Étape par étape:
fragment
est #_=_
.#
et en ne prenant que la première partie.history
afin de remplacer l'actuel état de la page avec l'URL "propre". Cela modifie l'actuelle entrée de l'historique au lieu d'en créer un nouveau. Ce que cela signifie, c'est les boutons précédent et suivant fonctionnera tout simplement la façon dont vous le souhaitez. ;-)#_-_
. En savoir plus sur history.replaceState
.
En savoir plus sur window.location
.
Facebook utilise un cadre et à l'intérieur tout fonctionne à l'aide d'AJAX communication. Le plus gros problème dans ce cas est de préserver le courant de l'état de la page. Autant je comprends, Facebook a décidé d'utilisation simulée ancres. Cela signifie que si vous avez cliqué quelque part, ils simulent que comme un point d'ancrage à l'intérieur de votre page, et quand l'AJAX communication commence, ils changent l'ancre peu de votre URL.
Cette solution vous permet de vous normalement, lorsque vous essayez de recharger la page (pas d'ENTRÉE, appuyez sur la touche F5), parce que votre navigateur envoie à l'ensemble de l'URL avec des ancres à l'Facebook serveur. Par conséquent, Facebook récupère la dernière de l'état (ce que vous voyez) et vous êtes alors en mesure de continuer à partir de là.
Lorsque la fonction de rappel retourne avec #_=_
cela signifie que la page a été dans son état de base avant de la laisser. Parce que cette ancre est interprété par le navigateur, vous devez vous inquiétez pas à ce sujet.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.