6
votes

JavaScript pour rediriger de #anchor à une page séparée

J'ai un ensemble de liens avec #CHORS pointant vers une page Web unique et je voudrais passer en douceur à un modèle avec une page Web séparée pour chacun de ces liens. Je veux que les anciens liens continuent à travailler à l'aide d'une redirection.

ancien style de liaison: xxx

neuf style: xxx

Je sais que le serveur ne reçoit pas le nom #anchor dans la demande, mais JavaScript pourrait.

est-il possible de Rediriger automatiquement de / ALL_PRODUCTS # A à / Produits / A Utilisation JavaScript?

JQuery irait bien, il est utilisé sur le site de toute façon.


0 commentaires

5 Réponses :


-1
votes

Cela pourrait aider:

<a href="/all_products#A" onclick="return redirectMe(this);">A</a>
<a href="/all_products#B" onclick="return redirectMe(this);">B</a>
<a href="/all_products#C" onclick="return redirectMe(this);">C</a>
<a href="/all_products#D" onclick="return redirectMe(this);">D</a>
<a href="/all_products#E" onclick="return redirectMe(this);">E</a>

<script type="text/javascript">
function redirectMe(a){
   var aa=a+"";
   window.location=aa.replace(/#/g,"/");
}
</script>   


1 commentaires

Downvote n'était pas de moi mais ce n'est pas ce dont j'ai besoin. Comme la réponse de Kkyy, cela ne fonctionnerait que pour des liens sur mon propre site Web, que je peux changer au nouveau schéma à tout moment. J'ai besoin de rediriger des liens enregistrés sur d'autres sites Web sur lesquels je n'ai pas de contrôle.



0
votes

avec jQuery, il suffit de remplacer le HREF avec le bon:

$('a').click(function() {
  window.location = this.href.replace(/all_products#/, 'products/');
  return false;
});


1 commentaires

Mais cela ne fonctionnerait que pour des liens sur mon site. Pas pour les liens existants d'autres sites. À droite?



2
votes

J'espère que cela peut aider :)

var urlSplit = document.URL.split("#");
if (urlSplit[1]) {
    location.href = "http://www.example.org" + "/" + urlSplit[1];
}
else {
    location.href = "http://www.example.org";
}


2 commentaires

Remarque: il y a un problème avec l'utilisation de celle-ci dans une page "Par défaut" dans un répertoire pour IE8: il perd la valeur hachage.


Vous devriez préférer cette méthode pour extraire le hachage et Cette méthode pour rediriger pour éviter les problèmes énoncés dans les articles liés. J'ai ajouté une réponse mise à jour, y compris ces meilleures pratiques ci-dessous .



3
votes

Mettez ceci aussi près du haut de votre HTML code> Comme vous pouvez l'exécution avant le reste de la page Ressources Télécharger:

<script>
function checkURL() {
    var old_path = '/all_products';
    if (window.location.pathname != old_path) {
        // Not on an old-style URL
        return false;
    }
    // Some browsers include the hash character in the anchor, strip it out
    var product = window.location.hash.replace(/^#(.*)/, '$1');
    // Redirect to the new-style URL
    var new_path = '/products';
    window.location = new_path + '/' + product;
}
checkURL();
</script>


0 commentaires

12
votes

J'ai ajouté cette nouvelle réponse pour inclure quelques meilleures pratiques pour les deux extraire le hachage de l'URL et dans une redirection .

// Closure-wrapped for security.
(function () {
    var anchorMap = {
        "A": "/products/A",
        "B": "/products/B",
        "C": "/products/C"
    }
    /*
    * Best practice for extracting hashes:
    * https://stackoverflow.com/a/10076097/151365
    */
    var hash = window.location.hash.substring(1);
    if (hash) {
        /*
        * Best practice for javascript redirects: 
        * https://stackoverflow.com/a/506004/151365
        */
        window.location.replace(anchorMap[hash]);
    }
})();


0 commentaires