Got an issue with safari loading old youtube videos when back button is clicked. I have tried adding onunload="" (mentioned here Preventing cache on back-button in Safari 5) to the body tag but it doesn't work in this case.
Is there any way to prevent safari loading from cache on a certain page?
You can use an anchor, and watch the value of the document's location href;
Start off with
http://acme.co/
, append something to the location, like '#b';So, now your URL is
http://acme.co/#b
, when a person hits the back button, it goes back tohttp://acme.co
, and the interval check function sees the lack of the hash tag we set, clears the interval, and loads the referring URL with a time-stamp appended to it.There are some side-effects, but I'll leave you to figure those out ;)
This is untested but it should work with minimal tweaking.
All of those answer are a bit of the hack. In modern browsers (safari) only on
onpageshow
solution work,but on slow devices sometimes you will see for a split second previous cached view before it will be reloaded. Proper way to deal with this problem is to set properly Cache-Control on the server response to one bellow
'Cache-Control', 'no-cache, max-age=0, must-revalidate, no-store'
First of all insert field in your code:
then run jQuery:
The behavior is related to Safari's Back/Forward cache. You can learn about it on the relevant Apple documentation: http://web.archive.org/web/20070612072521/http://developer.apple.com/internet/safari/faq.html#anchor5
Apple's own fix suggestion is to add an empty iframe on your page:
(The previous accepted answer seems valid too, just wanted to chip in documentation and another potential fix)
Your problem is caused by back-forward cache. It is supposed to save complete state of page when user navigates away. When user navigates back with back button page can be loaded from cache very quickly. This is different from normal cache which only caches HTML code.
When page is loaded for bfcache
onload
event wont be triggered. Instead you can check thepersisted
property of theonpageshow
event. It is set to false on initial page load. When page is loaded from bfcache it is set to true.Kludgish solution is to force a reload when page is loaded from bfcache.
If you are using jQuery then do:
Yes the Safari browser does not handle back/foreward button cache the same like Firefox and Chrome does. Specially iframes like vimeo or youtube videos are cached hardly although there is a new iframe.src.
I found three ways to handle this. Choose the best for your case. Solutions tested on Firefox 53 and Safari 10.1
1. Detect if user is using the back/foreward button, then reload whole page or reload only the cached iframes by replacing the src
2. reload whole page if page is cached
3. remove the page from history so users can't visit the page again by back/forward buttons