now uses onhashchange event