50 votes

Paramétrage de window.location JavaScript

Je suis actuellement en train de mettre la fenêtre.emplacement.chemin d'accès à la propriété pour rediriger l'utilisateur vers une URL relative. La nouvelle URL des paramètres, de sorte que la ligne de JavaScript ressemble à ceci:

window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

C'est un succès dans Firefox, cependant Chrome code pour le point d'interrogation avec "%3F " et la demande échoue par la suite.

Je ne suis pas sûr si je suis à l'aide de la fenêtre.emplacement correctement. Ai-je besoin d'utiliser les propriétés de la fenêtre.l'emplacement pour le nom de chemin ou d'href? J'ai constaté que dès que j'ai mis une propriété, l'emplacement est rechargé, ainsi, par exemple, la recherche et le chemin des propriétés ne peut pas être réglé séparément. Peut-fenêtre.emplacement situé directement? J'ai seulement besoin de définir une URL relative à un paramètre.

69voto

bobince Points 270740

pathname et de nombreuses autres propriétés de l' location et les liens ne reflètent qu' une partie de l'URL:

http:  //www.example.com/path/to/example.html?param1=2&param3=4#fragment
^protocol^hostname      ^pathname            ^search           ^hash

Comme vous pouvez le voir, l' ?... de la partie de l'URL n'est pas une partie de l' pathname; il n'a pas de sens d'écrire une valeur contenant ? de location.pathname, en tant que partie d'une URL ne peut pas contenir un point d'interrogation. Chrome est de corriger votre erreur par codage du caractère à une séquence qui signifie littéralement le point d'interrogation, ce qui ne veut pas résilier pathname.

Ces propriétés sont grands pour la rupture d'un URL dans leurs éléments constitutifs pour vous, mais vous ne voulez probablement pas à leur écrire, dans ce cas. Au lieu de cela, écrire à l' location.href. Cela représente la totalité de l'URL, mais il est parfaitement bien pour écrire une URL relative à elle; ce sera travaillé par rapport à la valeur actuelle, il est donc en fait pas besoin de lire et de diviser l' pathname à tous les:

location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);

Notez l'URL de codage. Si un nom d'utilisateur peut contenir des caractères autres que des caractères alphanumériques, vous aurez probablement besoin de cela pour arrêter ces personnages briser le paramètre. Toujours encoder des chaînes arbitraires avant de les mettre dans la partie de l'URL.

17voto

Chris Laplante Points 18060

Essayez de définir la propriété location.href au lieu de window.location.pathname .

8voto

Pekka 웃 Points 249607

Utiliser window.location.href est considéré comme le moyen le plus sûr de définir une URL. Je pense que cela devrait résoudre le problème d'encodage.

 window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;
 

Si cela ne vous aide pas, veuillez montrer un exemple d'URL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X