附加到URL和刷新页面

我正在寻找写一段JavaScript将附加一个参数到当前的url,然后刷新页面 – 我怎么能做到这一点?

这应该工作(没testing!)

var url = window.location.href; if (url.indexOf('?') > -1){ url += '&param=1' }else{ url += '?param=1' } window.location.href = url; 

比接受的答案还要短,但要保持简单:

 window.location.search += '&param=42'; 

我们不必改变整个url,只是查询string,称为位置的search属性。

在为search属性分配值时,浏览器自动插入问号,重新载入页面。

这里的大多数答案都build议应该将参数附加到URL,如下面的片段或类似的变体:

 location.href = location.href + "&parameter=" + value; 

这在大多数情况下都能很好地工作。

然而

在我看来,这不是将一个参数附加到URL的正确方法。

由于build议的方法不testing参数是否已经在URL中设置,如果不小心,可能会结束一个非常长的URL重复多次相同的参数。 即:

 https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1 

在这一点上是问题开始的地方。 build议的方法可能并将在多个页面刷新后创build一个很长的URL,从而使URL无效。 点击这个链接了解更多关于long URL的信息不同浏览器中URL的最大长度是多less?

这是我build议的方法:

 function URL_add_parameter(url, param, value){ var hash = {}; var parser = document.createElement('a'); parser.href = url; var parameters = parser.search.split(/\?|&/); for(var i=0; i < parameters.length; i++) { if(!parameters[i]) continue; var ary = parameters[i].split('='); hash[ary[0]] = ary[1]; } hash[param] = value; var list = []; Object.keys(hash).forEach(function (key) { list.push(key + '=' + hash[key]); }); parser.search = '?' + list.join('&'); return parser.href; } 

有了这个function,只需要做以下的事情:

 location.href = URL_add_parameter(location.href, 'param', 'value'); 
 function gotoItem( item ){ var url = window.location.href; var separator = (url.indexOf('?') > -1) ? "&" : "?"; var qs = "item=" + encodeURIComponent(item); window.location.href = url + separator + qs; } 

更多compat版本

 function gotoItem( item ){ var url = window.location.href; url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item); window.location.href = url; } 
 location.href = location.href + "&parameter=" + value;