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.
3 réponses
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
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;
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);
Questions connexes
Questions liées
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.