4 ms·
reading the source it looks like for some browsers that rate limit url updates, it has to use a different way that nukes your back button ability.
by dhsysusbsjsi 1y ago
reading the source it looks like for some browsers that rate limit url updates, it has to use a different way that nukes your back button ability.
- senfiaj 1y agofunction drawWorld() { var hash = '#|' + gridString() + '|[score:' + currentScore() + ']'; if (urlRevealed) { // Use the original game representation on the on-DOM view, as there are no // escaping issues there. $('#url').textContent = location.href.replace(/#.*$/, '') + hash; } // Modern browsers escape whitespace characters on the address bar URL for // security reasons. In case this browser does that, replace the empty Braille // character with a non-whitespace (and hopefully non-intrusive) symbol. if (whitespaceReplacementChar) { hash = hash.replace(/\u2800/g, whitespaceReplacementChar); } history.replaceState(null, null, hash); // Some browsers have a rate limit on history.replaceState() calls, resulting // in the URL not updating at all for a couple of seconds. In those cases, // location.hash is updated directly, which is unfortunate, as it causes a new // navigation entry to be created each time, effectively hijacking the user's // back button. if (decodeURIComponent(location.hash) !== hash) { console.warn( 'history.replaceState() throttling detected. Using location.hash fallback' ); location.hash = hash; } }