设置JavaScript窗口位置

kwvwclae  于 2023-11-15  发布在  Java
关注(0)|答案(4)|浏览(93)

我目前正在设置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?我发现只要我设置一个属性,位置就会重新加载,所以例如search和pathname属性无法单独设置。可以直接设置window.location吗?我只需要设置一个带参数的相对URL。

pgvzfuti

pgvzfuti1#

pathnamelocation的许多其他属性以及链接仅反映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编码。如果用户名可以包含字符串以外的其他字符,您可能需要使用此方法来阻止这些字符破坏参数。在将任意字符串放入URL之前,请始终对它们进行URL编码。

g2ieeal7

g2ieeal72#

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

acruukt9

acruukt93#

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

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

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

xxe27gdn

xxe27gdn4#

"
在您的情况下,您可以设置location.search属性,而无需知道/重置/解码整个URL。

location.search = 'u=' + selected_user

字符串
或者如果你有很多参数,有很多不同类型的字符

location.search = 
    new URLSearchParams({
       u: selected_user,
       otherThing: "hi this %#%##^ is a "+
          "Very •}€○♡●¡● complex string"

    });

相关问题