Configuración de JavaScript window.location
(3)
El uso de window.location.href
se considera la forma más segura de establecer una URL. Creo que esto debería solucionar el problema de codificación.
window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( ''/'' ) + 1 ) + ''myPage.xhtml?u='' + selected_user.Username;
Si eso no ayuda, muestra un URL de ejemplo.
Actualmente estoy configurando la propiedad window.location.pathname para redirigir al usuario a una URL relativa. La nueva URL tiene parámetros, por lo que la línea de JavaScript se ve así:
window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( ''/'' ) + 1 ) + ''myPage.xhtml?u='' + selected_user.Username;
Esto tiene éxito en Firefox, sin embargo, Chrome codifica el signo de interrogación con ''% 3F'' y la solicitud falla posteriormente.
No estoy seguro de si estoy usando window.location correctamente. ¿Debo usar propiedades de window.location como pathname o href? Descubrí que, tan pronto como establezco una propiedad, la ubicación se vuelve a cargar, por lo que, por ejemplo, las propiedades de la búsqueda y la ruta no se pueden configurar por separado. ¿Se puede establecer window.location directamente? Solo necesito establecer una URL relativa con un parámetro.
Intente establecer la propiedad location.href
lugar de window.location.pathname
.
pathname
y muchas otras propiedades de location
y enlaces reflejan solo parte de la URL:
http: //www.example.com/path/to/example.html?param1=2¶m3=4#fragment
^protocol^hostname ^pathname ^search ^hash
Como puede ver, la ?...
parte de la URL no es parte de la pathname
; no tiene sentido escribir un valor que contenga ?
a location.pathname
, ya que esa parte de una URL no puede contener un signo de interrogación. Chrome está corrigiendo tu error codificando el personaje en una secuencia que significa un signo de interrogación literal, que no termina la pathname
.
Estas propiedades son excelentes para dividir una URL en sus partes constituyentes para que la procese, pero es probable que no desee escribirle en este caso. En cambio, escribe en location.href
. Esto representa la URL completa, pero está perfectamente bien escribir una URL relativa a ella; esto se resolverá en relación con el valor actual, por lo que no hay necesidad de leer y dividir el pathname
de pathname
en absoluto:
location.href= ''myPage.xhtml?u=''+encodeURIComponent(selected_user.Username);
Tenga en cuenta la codificación URL. Si un nombre de usuario puede contener caracteres distintos de los alfanuméricos, es probable que necesite esto para detener esos caracteres que rompen el parámetro. Siempre codifique URL cadenas arbitrarias antes de ponerlas en parte de una URL.