例如,
如果我使用“www.site.com”的搜索栏,我会看到“www.site.com/search”,这很好。
如果我使用“www.site.com/events/”中的搜索栏,我会看到“www.site.com/events/search”,这很愚蠢。
为什么这样做?这是行为还是history.js错误或我的错误?
答案 0 :(得分:11)
举例说明你在做什么。
如果地址栏中的当前网址格式为:http://somesite.com/path/
在这种情况下,您传递pushState( null, null, 'newpath' );
,该链接看起来像http://somesite.com/path/newpath
,但如果您将参数传递为:pushState( null, null, '/newpath' )
,则在这种情况下看起来像这样:
http://somesite.com/newpath
答案 1 :(得分:3)
如果您的应用程序未部署在根目录下(例如使用虚拟目录,或者只是在更深的层次结构中),那么如果您执行history.pushState({}, '/newpath');
还有几种选择:
1)在javascript变量中获取根路径,您可以在其中添加URL。在这个例子中,window.ViewModel.rootPath
只是一个任意的地方 - 只需修改它,但是你想要存储全局变量。
您必须在脚本中设置rootPath
(此处针对.NET的示例)。
<script>
window.ViewModel.rootPath = "@Request.ApplicationPath";
</script>
history.pushState({}, window.ViewModel.rootPath + '/newpath');
2)检查URL是否以/
结尾,如果是,则需要上升到1个目录级别。注意:这种方法要求您了解父母&#39;您发布的目录 - 在这种情况下YourAccount
。
history.pushState({ mode: 'Club' }, '',
(window.location.href.endsWith('/') ? '../' : '') +
'YourAccount/ManageClub/' + id );
如果当前网址为/preview/store/YourAccount
,那么这将成为../YourAccount/ManageClub/123
。
如果当前网址为/preview/store/YourAccount/
,那么这将成为YourAccount/ManageClub/123
。
这两者最终都在同一个网址上。