10

例如,

如果我使用“www.site.com”中的搜索栏,我会看到“www.site.com/search”,这很好。

如果我使用“www.site.com/events/”中的搜索栏,我会看到“www.site.com/events/search”,这很愚蠢。

为什么这样做?这是行为还是 history.js 错误或我的错误?

4

2 回答 2

14

举一个你在做什么的例子。

如果地址栏中的当前 URL 具有以下形式:http://somesite.com/path/ 并且您pushState( null, null, 'newpath' );在这种情况下传递,则链接将如下所示,http://somesite.com/path/newpath但如果您将参数传递为:pushState( null, null, '/newpath' ),则在这种情况下将如下所示: http://somesite.com/newpath

于 2012-04-06T15:48:24.150 回答
4

如果您的应用程序没有部署在根目录(例如使用虚拟目录,或者只是在更深的层次结构中),那么您最终会搞砸 URLhistory.pushState({}, '/newpath');

有几个选择:

1)在一个javascript变量中获取你的根路径,你可以在它前面加上URL。在此示例window.ViewModel.rootPath中只是一个任意位置 - 只需修改它以存储全局变量。

您必须设置rootPathin 脚本(此处为 .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 结束。

于 2015-10-28T02:32:27.277 回答