demo · v132
Link playground — what the desktop browser does on each click target
Walk through the decision table the desktop installer uses. Same-app link, cross-origin link, anchor link, target=_blank link, programmatic location.href — each has a different verdict, sometimes per capture_links mode. Live probes show whether YOUR session is running as an installed app.
display: standalone: —
launchQueue: —
window-controls-overlay: —
| link target | capture_links: none | existing-client-navigate | existing-client-event | new-client |
|---|---|---|---|---|
| https://app.example/inbox (same scope) | tab | app (nav existing) | app (event) | app (new window) |
| https://app.example/login#hash | tab | app (nav) | app (event) | app (new) |
| https://other.example/foo (out of scope) | tab | tab | tab | tab |
| <a target="_blank"> same-scope | tab | app (existing) | app (event) | app (new) |
| JS: location.href = "..." same-scope | tab | tab (same-window nav) | tab | tab |
| middle-click on same-scope link | tab | tab | tab | app (new window) |
// publisher manifest
{
"scope": "https://app.example/",
"start_url": "https://app.example/",
"display": "standalone",
"capture_links": "existing-client-event",
"launch_handler": { "client_mode": "navigate-existing" }
}
User-initiated clicks (left-click, Enter on focused anchor) participate in capture; programmatic navigations and middle-clicks have their own rules. Capture only kicks in for installed apps in standalone display mode.
see also
- User Nav Capturing on Desktop — feature index
- manifest builder
- ChromeStatus entry