2011-03-23 3 views
0

J'ai ce problème dans mon projet récent. J'ai une page de galerie en utilisant php (gallery.php) qui a jquery fancybox pour faire apparaître chaque photo dans la galerie. Et j'utilise la page séparée details.php pour afficher chaque photo dans fancybox. (deatils.php? id = xxx)Modifier l'URL de la fenêtre parent en utilisant fancybox

Tout fonctionne très bien, mais la chose est l'URL de la fenêtre d'arrière-plan restent le gallery.php lorsque l'utilisateur clique sur chaque photo. Je voulais changer l'URL en (gallery.php? Id = xxx) afin que l'utilisateur puisse partager l'URL sur facebook.

J'ai également reçu le code pour montrer la bonne photo quand id est passé dans la galerie. Par exemple, lorsque le lien de partage facebook revient à gallery.php? id = xxx, il affiche la bonne page de détails dans fancybox, mais lorsque l'URL close de fancybox reste la même.

Je sais que ce son est correct mais il y a quand même un masque ou des changements d'url à chaque fois qu'une fenêtre fancybox apparaît. S'il vous plaît, aidez-nous ...

Répondre

0

Vous pouvez utiliser history.pushState() mais le support n'est pas génial à l'écriture.

Le moyen le plus compatible est d'utiliser le hachage, window.location.hash.

Sur un rappel pour chaque image, vous pouvez faire ...

function() { 
    window.location.hash = index; 
} 

... où index est l'indice de l'image actuelle.

Mettez à jourFancybox doesn't appear to have a callback pour les boutons suivant ou précédent, mais vous pouvez les pirater. Vous pouvez attacher un gestionnaire de clic aux boutons $('#fancybox-right') et $('#fancybox-left') respectivement.

Puis chargement de la page, vous pouvez le faire parce que vous avez déjà mis en place avec un param GET, ...

var fragment = window.location.hash.substring(1); 

if (fragment) { 
    window.location = 'details.php?id=' + fragment; 
} 

De cette façon, si quelqu'un donne à quelqu'un d'autre le lien http://example.com/gallery.php#4, leur navigateur (fourni ils ont JavaScript activé) les portera à http://example.com/details.php?id=4.

+0

merci pour la réponse alex pourriez-vous me montrer un exemple de l'utiliser, je suis un peu newb à js. – zaw

+0

@zaw Il y a un exemple ci-dessus. – alex

+0

#id est le travail mais j'utilise une boîte de fantaisie à l'intérieur de la page de la galerie, la page de détails ne peut apparaître avec fancybox lorsque l'utilisateur clique sur l'image dans la galerie .. "detail.php" lui-même afficher en page html. En fait, vous pouvez essayer sur cette URL http://www.bigyolk.com/canon2011/gallery.php?id=62, il apparaîtra la bonne page, mais quand fermer, et ouvrir une autre image, il apparaîtra image droite, mais l'URL est le même. – zaw

0

J'ai résolu ceci en rafraîchissant simplement l'autre forme en utilisant une partie de mon propre truc: D de sorte que l'utilisateur ne partagera pas le mauvais identifiant car l'url sera juste www.myurl.com/gallery.php ...

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<?php 
    $id=$_REQUEST['id']; 
    $postid=$_POST['postid']; 
    if($id!="") { 
?> 
<script> 
    $(document).ready(function() { 
     $('#testform').submit(); 
    }); 
    </script> 
<?php } ?> 
</head> 
<body> 
<?php 
    echo $postid; 
    echo "<form id='testform' name='testform' method='post' action='testpost.php'>"; 
    echo "<input type='hidden' name='postid' value='".$id."'>"; 
    echo "<input type='submit' value='submit'>"; 
    echo "</form>"; 
?> 
</body> 
</html> 
+0

Vous avez un trou XSS (ou deux). Essayez cette URL 'gallery.php? Id ="> alex

Questions connexes