web-dev-qa-db-fra.com

Définition de window.location JavaScript

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.

40
Mark

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&param3=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.

59
bobince

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

13
Chris Laplante

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.

7
Pekka 웃