Unless you need to support ancient browsers [1], I'd go the easy way and leave the URL parsing to the browser, e.g. `['http:', 'https:', 'mailto:', 'tel:'].includes(new URL(value, location.origin).protocol)`
> The new systemd-resolved package will not be installed automatically on upgrades as it has been split into a separate package. If using the systemd-resolved system service, please install the new package manually after the upgrade, and note that until it has been installed, DNS resolution may no longer work as the service will not be present on the system.
will installing over the internet work without DNS resolution?
yeah, that's not ideal, or possibly very bad UX, depending on how the update happens. (if the running stub resolver of resolved is not shut down, or at least an effort is made to fix resolve.conf during removal of the old package, then it might cover most of the users. as far as I understand the 11 -> 12 upgrade works without manual intervention, and this is an edge case, as systemd-resolved is not enabled by default on Debian 11.)
Isn't that what document.baseURI is for? At least that's my understanding:
new URL("/whatever", document.baseURI)