This question is similar to Track when user hits back button on the browser, but not the same... I have a solution and am posting it here for reference and feedback. If anyone has any better options, I'm all ears!
The situation is that I have a page with an "in place edit", a la flickr. I.e. there is a "click here to add a description" DIV, which when clicked turns into a TEXTAREA with Save and Cancel buttons. Clicking Save posts the data to the server to update the database and puts the new description in the DIV in place of the TEXTAREA. If the page is refreshed, the new description is displayed from the database with a "click to edit" option. Fairly standard web 2.0 stuff these days.
The issue is that if:
- the page is loaded without the description
- a description is added by the user
- the page is navigated away from by clicking a link
- the user clicks the back button
Then what is displayed (from the browser's cache) is the version of the page without the dynamically modified DIV containing the new description.
This is a fairly big problem as the user assumes that their update has been lost and won't necessarily understand that they need to refresh the page to see the changes.
So, the question is: How can you flag a page as being modified after it has loaded, and then detect when the user "goes back to it" and force a refresh in that situation?
Using this page, especially incorporating the comment by @sajith about the answer by @Nick White and this page: http://www.mrc-productivity.com/techblog/?p=1235
You can solve it using the onbeforeunload event:
Having an onbeforeunload empty event manager function means the page will be re-built every single time it is accessed. Javascripts will re-run, server-side scripts will be re-run, the page will be built as if the user was hitting it for the very first time, even if the user got to the page just by hitting the back or forward button.
Here is the full code of an example:
Try it, navigate away this page and then get back using "Back" or "Forward" buttons in your browser.
It works fine in IE, FF and Chrome.
Of course you can do whatever you want inside myfun function.
More info: http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript
I've run into a similar problem today and I solved it with localStorage (here with a bit of jQuery):
Si basically:
On page 1, when the user submits the form, we set a value "steps" in localStorage to indicate what step the user has taken. At the same time, we launch a function with timeout that will check if this value has been changed (e.g. 10 times/second).
On page 2, we immediately change said value.
So if the user uses the back button and the browser restores page 1 in the exact state it was when we left it, the checkSteps function is still running, and able to detect that the value in localStorage has been changed (and can take appropriate action). Once this check has filled its purpose, there's no need to continue running it, so we simply don't use setTimeout anymore.