Let the "Open on" button choose a browser
CI / Typecheck, test, build (pull_request) Successful in 28s
CI / Typecheck, test, build (pull_request) Successful in 28s
The StopTheMadness rules are indiscriminate, which is the point, but they catch the link on the way back out as well: in the browser they are installed in, "Open on <platform>" redirects straight back here. The one button meant to reach the app is the one that cannot. Handing the address to a different browser is the way past it, and the only way to do that from a page is that browser's own URL scheme. `/` gets a picker for which one; the choice lives in that browser's localStorage, because which browsers are installed is a fact about the device and the phone's answer is not the Mac's. The scheme table is its own module so a test can pin it -- every browser spells it differently, and Edge differs between macOS and iOS. Firefox has no scheme on macOS, so it is only offered on iOS, and an unknown or schemeless choice keeps the plain link rather than producing a dead one. The markup still carries the plain https address and the script swaps it afterwards, so nothing changes without JavaScript. Once a browser is chosen the button says which, since a scheme for a browser that is not installed opens nothing and the tap would otherwise be silent. Closes #7 Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KF5YF3iZVKbezwALap8LYd
This commit is contained in:
@@ -73,6 +73,34 @@ button hands back.
|
||||
`/` serves these rules with the live hostname already filled in, if you'd rather copy
|
||||
them from there.
|
||||
|
||||
## Opening the original
|
||||
|
||||
The rules are indiscriminate, which is the point — but that catches the way back out
|
||||
too. Tapping "Open on Instagram" in the browser the rules are installed in redirects
|
||||
straight back here, so the one button meant to get you to the app is the one button that
|
||||
cannot.
|
||||
|
||||
The way past it is to hand the address to a *different* browser, by its own URL scheme.
|
||||
`/` has a picker for which one:
|
||||
|
||||
| Browser | macOS | iOS |
|
||||
| --- | --- | --- |
|
||||
| Chrome | `googlechromes://…` | `googlechromes://…` |
|
||||
| Edge | `microsoft-edge:https://…` | `microsoft-edge-https://…` |
|
||||
| Orion | `orion://open-url?url=…` | `orion://open-url?url=…` |
|
||||
| Firefox | — | `firefox://open-url?url=…` |
|
||||
|
||||
Firefox on macOS registers no scheme, so it is not offered there; nor is Safari itself,
|
||||
which is the browser being escaped. The choice is kept in that browser's own
|
||||
`localStorage` — not a cookie and not synced, because "which browser is installed" is a
|
||||
fact about the device, not about you, and the phone's answer is not the Mac's.
|
||||
|
||||
The link in the page is always the plain `https://` address, and the scheme is swapped in
|
||||
by the script afterwards; with JavaScript off, or with the default left alone, nothing
|
||||
changes. Once a browser is chosen the button says which one, because a scheme for a
|
||||
browser that isn't installed opens nothing at all, and a silent tap needs an
|
||||
explanation. The URL underneath stays selectable either way.
|
||||
|
||||
## How it works
|
||||
|
||||
Every request drives a real Chromium page load. One code path, and it survives markup
|
||||
|
||||
Reference in New Issue
Block a user