Use History API in the demo
diff --git a/demo/index.js b/demo/index.js
index 63d2b1d..73648b3 100644
--- a/demo/index.js
+++ b/demo/index.js
@@ -59,7 +59,8 @@
   const selectableRange = document.createRange();
   selectableRange.selectNodeContents(selectable);
   const descriptor = await describeRange({ range, context: selectableRange });
-  window.location.hash = fragment.stringify(descriptor);
+  const nextFragment = fragment.stringify(descriptor);
+  window.history.replaceState(descriptor, null, `#${nextFragment}`);
 }
 
 function isWithinNode(range, node) {
@@ -71,14 +72,14 @@
   );
 }
 
-window.addEventListener('hashchange', refresh);
+window.addEventListener('popstate', refresh);
 document.addEventListener('DOMContentLoaded', refresh);
 document.addEventListener('selectionchange', onSelectionChange);
 
 if (module.hot) {
   module.hot.accept();
   module.hot.dispose(() => {
-    window.removeEventListener('hashchange', refresh);
+    window.removeEventListener('popstate', refresh);
     document.removeEventListener('DOMContentLoaded', refresh);
     document.removeEventListener('selectionchange', onSelectionChange);
   });