Javascript Webkit turning“#&引用;进入%23导致404错误?

Javascript Webkit turning“#&引用;进入%23导致404错误?,javascript,ajax,webkit,http-status-code-404,Javascript,Ajax,Webkit,Http Status Code 404,我只是在构建一个简单的ajax站点,但在safari和chrome中遇到了一个问题。我只是创建一个简单的重定向,如果用户转到一个页面,例如 "/blog" 它们将被重定向到 "/#/blog" 代码: url = window.location.pathname if(url != "/") { window.location.pathname = "/#" + url } 这在FireFox中非常有效,但不幸的是,webkit浏览器正在将“#”变成“%23”,并给出404,例如

我只是在构建一个简单的ajax站点,但在safari和chrome中遇到了一个问题。我只是创建一个简单的重定向,如果用户转到一个页面,例如

"/blog" 
它们将被重定向到

"/#/blog"
代码:

url = window.location.pathname

if(url != "/") {
   window.location.pathname = "/#" + url
}
这在FireFox中非常有效,但不幸的是,webkit浏览器正在将“#”变成“%23”,并给出404,例如:

"/%23/blog"
我怎样才能防止这种情况

谢谢,
Alex

路径名指主机之后、查询字符串和哈希之前的所有内容。考虑这个问题:

window.location.hash = window.location.pathname;
window.location.pathname = "/";

我不确定哪些浏览器正确地实现了JavaScript规范,但WebKit的行为在我看来似乎是正确的。

路径名
指主机之后、查询字符串和哈希之前的所有内容。考虑这个问题:

window.location.hash = window.location.pathname;
window.location.pathname = "/";

我不确定哪些浏览器正确地实现了JavaScript规范,但WebKit的行为在我看来似乎是正确的。

您正在设置路径名,根据定义,路径名不包括哈希。Webkit正试图为您解决这个问题(Firefox只是更好地猜测了您想要什么)。试试这个:

window.location = '/#/blog';

您正在设置路径名,根据定义,路径名不包括散列。Webkit正试图为您解决这个问题(Firefox只是更好地猜测了您想要什么)。试试这个:

window.location = '/#/blog';

但当页面重新加载到“/”时,肯定会删除散列?@Alex不在chromium上。。。不确定其他浏览器的情况,但通常散列会保留您的方法,它从“/blog”=>“/blog#/blog”=>到“/”,实际上可能是我的一些页面逻辑造成的!如果您不更改路径名,它将不会重新加载。但当页面重新加载到“/”时,肯定会删除哈希?@Alex不在chromium上。。。不确定其他浏览器的情况,但通常散列会保留您的方法,它从“/blog”=>“/blog#/blog”=>到“/”,实际上可能是我的一些页面逻辑造成的!如果不更改路径名,它将不会重新加载。