设置JavaScript window.location

我目前正在设置window.location.pathname属性redirect用户到一个相对的URL。 新的URL有参数,所以JavaScript的行看起来像这样:

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

这在Firefox中是成功的,但Chrome使用'%3F'对问号进行编码,然后请求失败。

我不确定是否正确使用window.location。 我是否需要使用window.location的属性,如path名或href? 我发现,只要我设置一个属性的位置重新加载,所以例如,search和path名属性不能单独设置。 可以直接设置window.location吗? 我只需要用参数设置一个相对的URL。

pathname和许多其他属性的location和链接只反映了部分url:

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

正如您所看到的,URL的?...部分不是pathname一部分; 写一个包含?的值是没有意义的?location.pathname ,因为那部分URL不能包含问号。 Chrome正在通过将字符编码为序列来纠正您的错误,这意味着一个文字问号,它不会终止pathname

这些属性非常适合将URL分解为其组成部分以供处理,但在这种情况下,您可能不希望写入它们。 相反,写入location.href 。 这表示整个URL,但是写一个相对的URL是完全正确的; 这将相对于当前值计算出来,所以实际上根本不需要读取和分割pathname

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

请注意URL编码。 如果用户名可以包含除字母数字以外的其他字符,则可能需要使用此字符来阻止那些破坏参数的字符。 始终对任意string进行URL编码,然后将其放入URL的一部分。

尝试设置location.href属性而不是window.location.pathname

使用window.location.href被认为是设置 URL的最安全的方法。 我认为这应该解决编码问题。

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

如果这没有帮助,请显示一个示例URL。