例如,
如果我使用“www.site.com”中的搜索栏,我会看到“www.site.com/search”,这很好。
如果我使用“www.site.com/events/”中的搜索栏,我会看到“www.site.com/events/search”,这很愚蠢。
为什么这样做?这是行为还是 history.js 错误或我的错误?
例如,
如果我使用“www.site.com”中的搜索栏,我会看到“www.site.com/search”,这很好。
如果我使用“www.site.com/events/”中的搜索栏,我会看到“www.site.com/events/search”,这很愚蠢。
为什么这样做?这是行为还是 history.js 错误或我的错误?
举一个你在做什么的例子。
如果地址栏中的当前 URL 具有以下形式:http://somesite.com/path/
并且您pushState( null, null, 'newpath' );
在这种情况下传递,则链接将如下所示,http://somesite.com/path/newpath
但如果您将参数传递为:pushState( null, null, '/newpath' )
,则在这种情况下将如下所示:
http://somesite.com/newpath
如果您的应用程序没有部署在根目录(例如使用虚拟目录,或者只是在更深的层次结构中),那么您最终会搞砸 URLhistory.pushState({}, '/newpath');
有几个选择:
1)在一个javascript变量中获取你的根路径,你可以在它前面加上URL。在此示例window.ViewModel.rootPath
中只是一个任意位置 - 只需修改它以存储全局变量。
您必须设置rootPath
in 脚本(此处为 .NET 示例)。
<script>
window.ViewModel.rootPath = "@Request.ApplicationPath";
</script>
history.pushState({}, window.ViewModel.rootPath + '/newpath');
2) 检查 URL 是否以 a 结尾,/
如果是,则需要上一级目录。注意:这种方法要求您知道您发布的内容的“父”目录 - 在这种情况下YourAccount
。
history.pushState({ mode: 'Club' }, '',
(window.location.href.endsWith('/') ? '../' : '') +
'YourAccount/ManageClub/' + id );
如果当前 URL 是,/preview/store/YourAccount
那么这将变为../YourAccount/ManageClub/123
.
如果当前 URL 是,/preview/store/YourAccount/
那么这将变为YourAccount/ManageClub/123
.
它们都以相同的 URL 结束。