Appending parameter to URL without refresh
You can use the pushState or replaceState methods, i.e. :
window.history.pushState("object or string", "Title", "new url");
OR
window.history.replaceState(null, null, "?arg=123");
Example with argument:
var refresh = window.location.protocol + "//" + window.location.host + window.location.pathname + '?arg=1';
window.history.pushState({ path: refresh }, '', refresh);
If anyone wants to add a parameter to a more complex url (I mean, https://stackoverflow.com/questions/edit?newParameter=1), the following code worked for me:
var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?newParameter=1';
window.history.pushState({ path: newurl }, '', newurl);
Hope this helps!
You can also use URL API if you want to add and remove params at the same time:
const url = new URL(window.location.href);
url.searchParams.set('param1', 'val1');
url.searchParams.delete('param2');
window.history.replaceState(null, null, url); // or pushState