设置JavaScript window.location

时间:2010-09-04 16:14:56

标签: javascript window.location

我目前正在设置window.location.pathname属性以将用户重定向到相对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的属性,例如pathname或href?我发现,只要我设置了一个属性,就会重新加载该位置,因此,例如,不能单独设置搜索和路径名属性。可以直接设置window.location吗?我只需要设置一个带参数的相对URL。

3 个答案:

答案 0 :(得分:57)

pathname以及location和链接的许多其他属性仅反映网址的部分

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

如您所见,网址的?...部分不属于pathname;将包含?的值写入location.pathname是没有意义的,因为URL的该部分不能包含问号。 Chrome正在通过将字符编码为序列来纠正您的错误,该序列意味着文字问号,该问号不会终止pathname

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

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

请注意网址编码。如果用户名可以包含字母数字以外的字符,您可能需要这个来阻止那些破坏参数的字符。在将任意字符串放入URL的一部分之前,始终对其进行URL编码。

答案 1 :(得分:13)

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

答案 2 :(得分:7)

使用window.location.href被认为是设置网址的最安全方式。我认为应该修复编码问题。

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

如果这没有帮助,请显示示例网址。