不带尾随斜杠的History.js URL无法正常工作

时间:2014-04-08 09:05:07

标签: javascript history.js

我在没有重新加载的情况下使用History.js进行网址更改。这在包含产品过滤器的网站上使用,其中过滤器放置在URL中,以便可以与活动过滤器共享URL。

网站的网址不以尾部斜杠结尾,因此该网站的有效网址为: www.mysite.com/products

此网址会显示包含您可以应用过滤器的所有产品的列表。应用过滤器应将URL更改为:

www.mysite.com/products/?filter1=2,4,6&filter2=4

适用于FireFox,Chrome,IE11。但是在IE9中,它在尾部斜杠上失败。 IE9中的URL更改为:

www.mysite.com/products#products?filter1=2,4,6&filter2=4

它似乎将product视为参数,而不是URL的一部分。如果我在URL后面手动添加一个尾部斜杠,它在IE9中工作正常。

基本网址:www.mysite.com/products/在使用history.js时将为www.mysite.com/products/?filter1=2,4,6&filter2=4,即使在IE9中也是如此。

总结: 在基本URL的末尾添加尾部斜杠可以解决问题。但是我不想添加最后的尾部斜杠,history.js应该这样做。如何实现?

修改

我认为问题出在代码的这一部分,

var basePageUrl = (History.getLocationHref()).replace(/[#\?].*/,'').replace(/[^\/]+$/,function(part,index,string){
  return (/[^\/]$/).test(part) ? '' : part;
}).replace(/\/+$/,'')+'/';

此脚本会转换此baseURL:www.mysite.com/products 进入:www.mysite.com

我在正则表达式中并不那么强大,所以实际上不知道正则表达式在这个例子中做了什么。

1 个答案:

答案 0 :(得分:0)

在History.getPageUrl函数中,我添加了这一行

//Yoni's hack to not have trailing slash
        if (pageUrl.substr(pageUrl.length - 1, 1) == '/') {
            pageUrl = pageUrl.substr(0, pageUrl.length - 1);
        }

之前的

return pageUrl;

在Symfony 2中我们没有使用尾随斜杠,所以从来没有使用它,它是一个很好的条件,如果你需要两种可能性,你必须以另一种方式处理它可能