Unexpected Chrome vs Edge popstate firing
Discovery of the day: Edge always fires a popstate
event when the URL hash is updated, even though it is updated to the same string as before. Chrome, on the other hand, only fires popstate
if the updated hash is different the second time.
So for example, if I click on a link with href=#foo
twice, Edge will fire two popstate
events, where Chrome will fire only one. In the examples below , I used location.hash
, but I have verified that the link clicking works the same way.
Popstate behavior on Edge 14. popstate
fired twice.:
Popstate behavior on Chrome 56 popstate
fired once:
Then there’s Edge 13 that doesn’t fire popstate
at all (ohgodwhy):
This is a known bug and claimed to have been fixed, I assume in later versions of Edge.
This is particularly frustrating when you are using popstate
events as a trigger for things like showing and hiding modals. Or if you’re using them to trigger a load of sorts.
I am not sure what the specs of this are, but if we consider each state that a homepage can be in tied to a unique URL, it makes sense to not have to fire a state change when the hash value remains the same. Then again, apparently browsers are known to handle the popstate event differently.
Popstate specs for the curious who might be up to the task of finding out the correct behavior: link.
This was giving me a pretty nasty bug that took awhile to figure out. So hopefully this helps someone out there.