Pick a store. The value is read straight back — a refused write does not throw, so read-back is the only honest signal. The last row is not a cookie: it is the fallback for a frame the browser gives no cookies to at all.
| Strategy | Write | Readable | Value |
|---|
Open this same page in a normal tab and compare the partition id and the context stamp. Different values mean the browser keeps a separate jar per top-level site, which is the single fact that decides how session persistence has to be designed.
window.opener? Paste the token instead
Drops a live embed on the board (an iframe with no Miro SDK) with three
items connected to it, then lets that embed try to reach this app's iframes on four
channels and read the board back. Only postMessage would also work if the
embed were on a different origin; the other three need same-origin plus a shared
storage partition.
The responder runs in every app surface, so the embed reports which one answered — that tells you whether the headless iframe alone is enough or the panel must stay open.
Can this Pages-hosted app open a modal on localhost? This page's
sdkUri is on github.io, so if an arbitrary http://localhost
URL loads as a modal, one app can serve everyone and reach a local server —
because the modal document itself is localhost-origin, so LNA never applies to its
own fetches.
And a panel? A spawner wants to be non-blocking and stay open while you place things on the board, which a modal cannot do. Same question as above, plus a second one: does opening a panel replace this one, or sit beside it? The docs cap modals at one explicitly and say nothing about panels. The request is routed through the headless iframe, which is where the SDK documents openPanel as belonging.
Watch what happens to this panel. Replaced means one panel at a time; still here alongside a new one means several can be laid out. A thrown error naming the URL means absolute cross-origin panel URLs are refused.