ti-enxame.com

Configurando JavaScript window.location

No momento, estou configurando a propriedade window.location.pathname para redirecionar o usuário para um URL relativo. O novo URL tem parâmetros, portanto a linha do JavaScript se parece com isso:

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

Isso é bem-sucedido no Firefox, no entanto Chrome codifica o ponto de interrogação com '% 3F') e a solicitação falha posteriormente.

Não tenho certeza se estou usando o window.location corretamente. Preciso usar propriedades do window.location, como nome do caminho ou href? Descobri que, assim que eu defini uma propriedade, o local é recarregado. Por exemplo, as propriedades de pesquisa e nome do caminho não podem ser definidas separadamente. O window.location pode ser definido diretamente? Eu só preciso definir uma URL relativa com um parâmetro.

40
Mark

pathname e muitas outras propriedades de location e links refletem apenas parte do URL:

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

Como você pode ver, o ?... parte do URL não faz parte do pathname; não faz sentido escrever um valor contendo ? para location.pathname, pois a parte de um URL não pode conter um ponto de interrogação. Chrome está corrigindo seu erro, codificando o caractere para uma sequência que significa um ponto de interrogação literal, que não termina com pathname.

Essas propriedades são ótimas para dividir uma URL em suas partes constituintes para você processar, mas provavelmente você não deseja gravá-las nesse caso. Em vez disso, escreva para location.href. Isso representa o URL inteiro, mas é perfeitamente bom escrever um URL relativo nele; isso será trabalhado em relação ao valor atual; portanto, não há necessidade de ler e dividir os pathname:

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

Observe a codificação de URL. Se um nome de usuário puder conter caracteres diferentes de alfanuméricos, você provavelmente precisará disso para impedir que esses caracteres quebrem o parâmetro. Sempre codifique seqüências de caracteres arbitrárias antes de colocá-las em parte de uma URL.

59
bobince

Tente configurar o location.href propriedade em vez de window.location.pathname.

13
Chris Laplante

Usando window.location.href é considerada a maneira mais segura de definir um URL. Eu acho que isso deveria corrigir o problema de codificação.

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

Se isso não ajudar, mostre um exemplo de URL.

7
Pekka 웃