<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Static Space URL sync example</title> </head> <body> <div> <h2>Sync the query string and the hash to the parent page URL</h2> <label for=""> Query string <input type="text" id="query"> </label> <label> Hash <input type="text" id="hash"> </label> <button onclick="sync()">Sync</button> </div> <div> <h2>Read the initial query and hash</h2> <label> Initial query <input type="text" readonly id="initial-query"> </label> <label> Initial hash <input type="text" readonly id="initial-hash"> </label> </div> <div> <h2>Read the hash reactively</h2> <input type="text" readonly id="read-hash-reactive"> </div> <script> // Sync query and hash from this embedded app to the parent page URL. function sync() { const queryString = document.getElementById("query").value; const hash = document.getElementById("hash").value; // HF Spaces' spacial message type to update the query string and the hash in the parent page URL window.parent.postMessage({ queryString, hash, }, "https://huggingface.co"); } // Read the initial query and hash. const initialQuery = window.location.search; const initialHash = window.location.hash; document.getElementById("initial-query").value = initialQuery ?? ""; document.getElementById("initial-hash").value = initialHash ?? ""; // Read the updated hash reactively. // Note: there is no way to capture the query string update like this because updating query string causes page-reload (ref: https://stackoverflow.com/a/4291024). window.addEventListener("hashchange", (event) => { console.log("hash change event", event); const currentHash = window.location.hash; document.getElementById("read-hash-reactive").value = currentHash; }); </script> </body> </html>