Je configure actuellement la propriété window.location.pathname pour rediriger l'utilisateur vers une URL relative. La nouvelle URL a des paramètres, donc 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;
Cela réussit dans Firefox, cependant Chrome code le point d'interrogation avec '% 3F' et la demande échoue par la suite.
Je ne suis pas sûr d'utiliser correctement window.location. Dois-je utiliser des propriétés de window.location telles que chemin d'accès ou href? J'ai constaté que dès que j'ai défini une propriété, l'emplacement est rechargé, donc par exemple, les propriétés de recherche et de chemin ne peuvent pas être définies séparément. Window.location peut-il être défini directement? J'ai seulement besoin de définir une URL relative avec un paramètre.
pathname
et de nombreuses autres propriétés de location
et les liens ne reflètent que partie de l'URL:
http: //www.example.com/path/to/example.html?param1=2¶m3=4#fragment
^protocol^hostname ^pathname ^search ^hash
Comme vous pouvez le voir, le ?...
une partie de l'URL ne fait pas partie du pathname
; cela n'a aucun sens d'écrire une valeur contenant ?
à location.pathname
, car cette partie d'une URL ne peut pas contenir de point d'interrogation. Chrome corrige votre erreur en encodant le caractère dans une séquence qui signifie un point d'interrogation littéral, qui ne termine pas pathname
.
Ces propriétés sont idéales pour diviser une URL en ses parties constitutives à traiter, mais vous ne voudrez probablement pas leur écrire dans ce cas. Au lieu de cela, écrivez à location.href
. Cela représente l'URL entière, mais il est parfaitement correct d'y écrire une URL relative; cela sera calculé par rapport à la valeur actuelle, il n'est donc pas nécessaire de lire et de diviser le pathname
du tout:
location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);
Notez l'encodage URL. Si un nom d'utilisateur peut contenir des caractères autres que alphanumériques, vous en aurez probablement besoin pour empêcher ces caractères de casser le paramètre. Toujours coder des chaînes arbitraires par URL avant de les placer dans une URL.
Essayez de définir le location.href
propriété au lieu de window.location.pathname
.
En utilisant 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.