Le bouton Précédent de Chrome ne fonctionne pas correctement après la fermeture d’une iframe fancybox.

J’ai posté la même question sur fancybox github il y a quelque temps, mais le problème ne pouvait pas être résolu à ce moment-là, alors j’ai pensé que j’essaierais de nouveau ici:

Dans Chrome, j’ouvre une iframe fancybox, puis je navigue à l’aide des liens de la page iframe, puis je ferme la fancybox. Après avoir fermé la fancybox, pour pouvoir revenir en arrière, je dois cliquer sur le bouton Précédent autant de fois que le nombre de liens sur lesquels j’ai cliqué sur la page iframe. Donc, je suppose que (dans Chrome seulement – FF, IE fonctionne bien), toute navigation que je fais sur la fancybox iframe est enregistrée dans l’historique de l’ouvreur, ce qui entraîne un comportement très étrange: lorsque l’utilisateur ferme la fancybox et appuie sur le bouton Précédent, la la même page est rechargée encore et encore jusqu’à ce que le nombre de clics enregistrés sur l’iframe soit dépassé.

Voici un exemple: http://jsfiddle.net/YjXr5/ et le code que j’utilise pour ouvrir la fancybox

$("#link").fancybox({ 'autoDimensions' : true, 'width' : 400, 'height' : 300, 'autoScale' : false, 'type' : 'iframe' }); 

ouvrez le site dans une iframe fancybox, naviguez pendant 3-4 clics, puis fermez l’iframe. Ensuite, essayez un clic droit -> retour sur le volet des résultats et notez le comportement différent entre les navigateurs – FF et IE vous enverront à la page précédente “opener” tandis que chrome rechargera simplement l’ouvre aussi longtemps que vous avez cliqué sur des liens dans l’iframe. .

S’il n’y a pas de solution à cela, je serais également intéressé par une bonne alternative à fancybox, avec l’option iframe et un aspect similaire.

Merci

Le problème est que les navigateurs gèrent l’ history de différentes manières. Autant que je sache, Opera et Safari présentent également le même problème.

Une solution de contournement consiste à récupérer l’historique.length actuel au moment où fancybox s’ouvre et à le restaurer après sa fermeture si le navigateur correspond à Chrome, Opera et Safari (je ne connais aucun autre navigateur, mais la réponse peut être étendue).

En utilisant votre code ci-dessus, je voudrais append des rappels comme:

 var $history; $("#link").fancybox({ autoSize: true, //autoDimensions is an option for v1.3.4 width: 400, height: 300, fitToView: false, //autoScale is an option for v1.3.4 type: 'iframe', beforeLoad: function () { $history = window.history.length; // catch current history }, afterClose: function () { if (navigator.userAgent.match(/(Chrome|Opera|Safari)/gi)) { var goTo = window.history.length - $history; window.history.go(-goTo) // restore initial history } } }); 

Voir JSFIDDLE

NOTE : ceci est pour fancybox v2.1.x