J'ai besoin que toutes les pages de produits de blog s'affichent dans une fenêtre contextuelle. Pour afficher dans la fenêtre contextuelle, leur URL doit être au format https://expample.com?/ modal-link = blog_page_url. (J'utilise le plugin et c'est l'exigence)
Je voudrais écrire un code en javascript qui vérifie l'URL. Si l'URL de la page contient le mot «produit», je voudrais ajouter à l'url: https://expample.com?/modal-link= afin de pouvoir l'afficher dans une fenêtre contextuelle. J'utilise le code ci-dessous:

if(window.location.href.indexOf("product") > -1) {
  var url = window.location.href;    
  url_new = 'https://example.com/?modal-link=' + url
} else {

}
window.location.href = url_new;

Le crée une nouvelle URL, mais elle l'ajoute une quantité infinie de temps. Comment dois-je faire cela?

Suivez la question: (dois-je ouvrir une nouvelle question pour cela?)

Je souhaite adapter le code afin que la page ne se recharge pas lors de la redirection. Je sais qu'il existe d'autres articles à ce sujet, par exemple Comment puis-je modifier l'URL sans recharger la page? ou https://stackoverflow.com/questions/3338642/updating-address-bar-with-new-url-without-hash-or-reloading-the-pagebut quelqu'un pourrait-il m'aider à modifier mon code javascript pour ce cas spécifique? Aurais-je besoin d'utiliser les lignes ci-dessous?

document.location.hash = 'afterhash';
history.pushState('data to be passed', 'Title of the page', '/test');

Je ne sais pas quelle partie de mon code doit aller où dans les lignes ci-dessus.

0
LTech 19 juin 2019 à 11:33

3 réponses

Meilleure réponse

Il manque une condition d'arrêt à votre récursivité. Par exemple, si "some_product" contient "product" et que vous y ajoutez quelque chose, il contiendra toujours "product", comme dans "really_some_product", "really_really_some_product", etc. Vous pouvez voir où cela va, récursion infinie.

Donc, vous devez lui dire de s'arrêter à un moment donné, c'est-à-dire lorsque la nouvelle URL commence déjà par ce que vous avez l'intention d'ajouter à l'original.

Après cela, puisqu'il y a un cas dans lequel nous ne changeons rien, nous ne devons pas non plus rediriger.

var url = window.location.href,
    prepend_to_url = "https://example.com/?modal-link=",
    url_new = false;

if (url.indexOf(prepend_to_url) == 0) {
    // url starts with what we prepend
    // so do nothing
} else if(url.indexOf("product") > -1) {
    url_new = prepend_to_url + url;
}

if (url_new) { // don't redirect unless we've done something above
    window.location.href = url_new;
}

Une version plus concise du code ci-dessus pourrait ressembler à ceci:

var url = window.location.href,
    prepend_to_url = "https://example.com/?modal-link=",
    url_new = false;

if (url.indexOf(prepend_to_url) == -1  // url doesn't start with what we prepend
    && url.indexOf("product") > -1     // and our condition is met
) {
    url_new = prepend_to_url + url;
}

url_new && (window.location.href = url_new); // equivalent to an "if" statement
1
Teodor Sandu 19 juin 2019 à 09:02

Vous devez initialiser le url_new et le changer pour certaines conditions:

let url_new = window.location.href

if(window.location.href.indexOf("product") > -1) {
    url_new = 'https://example.com/?modal-link=' + window.location.href;
} 
window.location.href = url_new;
0
Ziv Ben-Or 19 juin 2019 à 09:48

Ce dont vous avez besoin est d'obtenir la partie des paramètres de requête du url en utilisant substr avec index de ? à la fin du url

var url_new;
if(window.location.href.indexOf("product") > -1) {
  var url = window.location.href.substr(window.location.href.indexOf("?") +1, window.location.href.length);    
  var newValue = 10;
  url_new = 'https://example.com/?modal-link=' + newValue + "&" + url
}
console.log(url_new);
0
Andam 19 juin 2019 à 08:44