Forum Programmation.web Safari/Webkit et les ancres lors d'une redirection

Posté par . Licence CC by-sa
0
5
sept.
2014

Bonjour,

J'ai un site sous Django qui utilise beaucoup les redirections (en particulier pour ajouter le préfixe de la langue à l'URL) et les ancres (pour une FAQ c'est pratique pour arriver au bon endroit dans la page).

Et là je m'aperçois que Safari/Webkit (contrairement aux autres navigateurs populaires) perd l'ancre dans le cas d'une redirection :
https://bugs.webkit.org/show_bug.cgi?id=24175

Jusqu'ici le comportement des ancres dans le cas d'une redirection n'était pas bien défini. Cela est en train de changer comme bien décrit ici :
http://stackoverflow.com/questions/2286402/url-fragment-and-302-redirects

Cela m'étonne un peu de ne pas avoir plus de personnes ayant ce problème (à moins que les redirections ou les ancres soient moins utilisés que ce que je pensais).

En attendant que Webkit soit changé (ce qui peut prendre des années), j'hésite un peu sur la solution à adopter pour contourner le problème.

J'ai beau y penser, je ne trouve que des hacks immondes.
Par exemple au lieu d'avoir example.com/index#toto je peux mettre example.com/index?anchor=toto#toto et je bidouille après avec la redirection dans Django pour ajouter l'ancre mais je trouve cela vraiment très très moche (en plus pas facile d'intervenir directement sur la redirection pour ajouter le préfixe de langue):

Est-ce qu'un des gurus qui fréquente ce forum pourrait m'indiquer comment résoudre élégamment ce problème ?

Merci !

  • # contourner le probleme

    Posté par . Évalué à 2.

    faire une redirection qui contient l'ancre.

    ex :
    mapage/monparagraphe/fr -> mapage?pays=fr#monparagraphe

    • [^] # Re: contourner le probleme

      Posté par . Évalué à 1.

      Merci mais je ne suis pas sûr d'avoir compris la différence avec ce que je proposais (example.com/index?anchor=toto#toto) ?

      • [^] # Re: contourner le probleme

        Posté par . Évalué à 1.

        Pour être clair :

        • (client) URL avant redirection: example.com/index#toto
        • (serveur) URL fourni redirigé : example.com/fr/index
        • (client) URL souhaitée après redirection: example.com/fr/index#toto
        • (client) URL après redirection avec Safari : example.com/fr/index

        Pour cela pour l'instant je ne vois pas comment je peux faire sans changer l'URL avant redirection :

        • (client) URL avant redirection: example.com/index?anchor=toto#toto
        • (serveur) URL fourni redirigé : example.com/fr/index#toto
        • (client) URL après redirection avec Safari : example.com/fr/index#toto
        • [^] # Re: contourner le probleme

          Posté par . Évalué à 2.

          parce que normalement, si mes souvenirs sont bons (j'ai pas fais beaucoup de django)
          django doit te reecrire les URLs qui vont etre affichées dans le navigateur,

          ton client doit alors recevoir
          example.com/index/fr/toto

          il clique dessus, django traduit l'URL en template, action, view, traitement,
          et reconstruit la reponse.

          • [^] # Re: contourner le probleme

            Posté par . Évalué à 1.

            Je vois ce que tu veux dire mais je vais avoir trop d'effets de bord avec cette technique.

            Si je commence à mettre les ancres dans le chemin même de l'URL, cela va être la galère de construire la regexp pour repérer ce qui est ancre et ce qui est chemin.

            Par exemple si j'ai une page example.com/fr/index/titi et une ancre titi, ta solution va provoquer un conflit.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.