How do I modify the URL without reloading the page?
This can now be done in Chrome, Safari, Firefox 4+, and Internet Explorer 10pp4+!
See this question's answer for more information:
Updating address bar with new URL without hash or reloading the page
Example:
function processAjaxData(response, urlPath){
document.getElementById("content").innerHTML = response.html;
document.title = response.pageTitle;
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
}
You can then use window.onpopstate
to detect the back/forward button navigation:
window.onpopstate = function(e){
if(e.state){
document.getElementById("content").innerHTML = e.state.html;
document.title = e.state.pageTitle;
}
};
For a more in-depth look at manipulating browser history, see this MDN article.
How to change URL without refreshing the page?
I think you might be looking for history.pushState
history.pushState([data], [title], [URL]);
Using your example of https://featurepoints.com/
history.pushState(null, 'FeaturePoints Login', 'https://featurepoints.com/login');
Source and more details https://css-tricks.com/using-the-html5-history-api/
how to fully change url without reloading the page to new url?
That is not possible for a good reason. You can get more info about this here: Same-origin policy
Change the URL in the browser without loading the new page using JavaScript
With HTML 5, use the history.pushState
function. As an example:
<script type="text/javascript">
var stateObj = { foo: "bar" };
function change_my_url()
{
history.pushState(stateObj, "page 2", "bar.html");
}
var link = document.getElementById('click');
link.addEventListener('click', change_my_url, false);
</script>
and a href:
<a href="#" id='click'>Click to change url to bar.html</a>
If you want to change the URL without adding an entry to the back button list, use history.replaceState
instead.
Updating address bar with new URL without hash or reloading the page
You can now do this in most "modern" browsers!
Here is the original article I read (posted July 10, 2010): HTML5: Changing the browser-URL without refreshing page.
For a more in-depth look into pushState/replaceState/popstate (aka the HTML5 History API) see the MDN docs.
TL;DR, you can do this:
window.history.pushState("object or string", "Title", "/new-url");
See my answer to Modify the URL without reloading the page for a basic how-to.
Change URL without refresh the page
Update
Based on Manipulating the browser history, passing the empty string as second parameter of pushState
method (aka title) should be safe against future changes to the method, so it's better to use pushState
like this:
history.pushState(null, '', '/en/step2');
You can read more about that in mentioned article
Original Answer
Use history.pushState
like this:
history.pushState(null, null, '/en/step2');
- More info (MDN article): Manipulating the browser history
- Can I use
- Maybe you should take a look @ Does Internet Explorer support pushState and replaceState?
Update 2 to answer Idan Dagan's comment:
Why not using
history.replaceState()
?
From MDN
history.replaceState() operates exactly like history.pushState() except that replaceState() modifies the current history entry instead of creating a new one
That means if you use replaceState
, yes the url will be changed but user can not use Browser's Back button to back to prev. state(s) anymore (because replaceState
doesn't add new entry to history) and it's not recommended and provide bad UX.
Update 3 to add window.onpopstate
So, as this answer got your attention, here is additional info about manipulating the browser history, after using pushState
, you can detect the back/forward button navigation by using window.onpopstate
like this:
window.onpopstate = function(e) {
// ...
};
As the first argument of pushState
is an object, if you passed an object
instead of null
, you can access that object in onpopstate
which is very handy, here is how:
window.onpopstate = function(e) {
if(e.state) {
console.log(e.state);
}
};
Update 4 to add Reading the current state:
When your page loads, it might have a non-null state object, you can read the state of the current history entry without waiting for a popstate
event using the history.state
property like this:
console.log(history.state);
Bonus: Use following to check history.pushState
support:
if (history.pushState) {
// \o/
}
Related Topics
Static Variables in JavaScript
Arrow Function Without Curly Braces
Whats the Best Way to Update an Object in an Array in Reactjs
Typeerror: $(...).Modal Is Not a Function with Bootstrap Modal
Get Element's Custom CSS Properties (-Mystyle) Using JavaScript
How to Animate a Progressive Drawing of Svg Path
Disable Underline for Lowercase Characters: G Q P J Y
Error: No Firebase App '[Default]' Has Been Created - Call Firebase App.Initializeapp()
How to Communicate Between Related React Components
Prevent Browser Caching of Ajax Call Result
How to List the Properties of a JavaScript Object
How to Highlight Text Using JavaScript
Difference Between Two Dates in Years, Months, Days in JavaScript
Jspdf Can't Get Any Styling to Work
Count Down Timer with Circular Progress Bar
Resetting the Opacity of a Child Element - Maple Browser (Samsung Tv App)