I'd first like to take a step back to more fully capture the non-fetch scheme cases:
- We know it and dispatch to an external application.
- We know it and translate to an HTTP(S) URL. (I.e.,
registerProtocolHandler(); might be restricted to secure contexts these days.)
- We do not know it.
2 is problematic for the first part of your proposal, unless we only handle them for top-level navigations and treat them as 3 in other contexts. I think only handling them for top-level navigations would be acceptable, for what it's worth, and I've been advocating that for a while.
For top-level navigations noopener was more of the effect I was after, bug 1613066 (COOP) offers the better primitive. This would
- Close the current browsing context from the perspective of the opener.
- Create a new browsing context to navigate to the non-fetch scheme.
- Work for redirects as it's enforced as part of the response, not the request.
If we can make this work I suspect other browsers would be interested in following and standardizing upon this.