URL 方案类似于“http://...”或“ftp://...”。 这些看起来像是您无法控制的非常底层的概念,但实际上您可以!
我会称之为非平凡的,但开发者可以在用户安装的应用程序中注册新的 URL 方案。 回溯到 2017 年,Microsoft Edge 进行了此操作
microsoft-edge://
如果您使用它,行为是将在 Microsoft Edge 中打开 URL — 即使您选择了不同的默认浏览器。 因此,如果我作为一个博主,想要实质上强迫您使用 Edge 访问此网站,我可以通过在每个 URL 的开头都使用此 URL 方案来实现。 我不会这么做,但我可以。 微软也可以。
当时,Daniel Aleksandersen 写了一个名为 EdgeDefelector 的程序来规避这种行为并 解释
我不讨厌 Microsoft Edge — 也许您讨厌! — 但我确实相信,那些已经配置了不同默认网络浏览器的用户应该被允许继续使用该默认网络浏览器。
由于 Brave 浏览器现在支持 microsoft-edge://
URL 方案,所以此事再次引起公众关注。 显然,应用程序不仅需要注册 URL 方案,而且支持链接点击的其他应用程序也需要尊重它。 Firefox 也 正在考虑添加它。 我认为,*不支持* URL 方案的风险是,点击此类链接可能会*不执行任何操作*,而不是实际打开 URL。
很多讨论都集中在 Windows 11 上。 但在我这台 Mac 上,我看到此 URL 方案在所有这些浏览器中都能正常运行。




Daniel 进一步阐述
那么,我们是如何走到这一步的呢? 在 2020 年 9 月发布 iOS 14 版本之前,您无法在 iPhone 和 iPad 上更改默认网络浏览器。 谷歌在 iOS 上拥有许多应用程序,包括其 Chrome 浏览器的外壳。 为了将所有应用程序联系在一起,谷歌于 2014 年 2 月引入了
googlechrome:
URL 方案。 它可以使用这些链接将您从其搜索或邮件应用程序定向到 Chrome,而不是 Apple 的 Safari 浏览器。
这是我的 iPhone 13 在安装和未安装 Google Chrome 的情况下打开 googlechrome://css-tricks.org.cn
的示例。


看起来这似乎是谷歌的过错,但实际上是 Apple 在 iOS 上允许了它。 Daniel 再次阐述
最初的错误是 Apple 的,但微软正在欣然享用苹果的成果。
我对这些事了解得还不够多,但我认为,如果我制作了与之相关的软件,我会很想拦截这些 URL 方案,并让它们在用户*当前处于*的浏览器中打开。 网络就是网络,没有任何理由任何给定的 URL *必须*在任何特定浏览器中打开。
除了这只是 URL 方案的一种使用类型。 它们还用于创建指向非浏览器应用程序的链接,这对于最终用户来说无疑是更好的。 但浏览器可以肯定地不尊重其他仅限浏览器的方案。
我知道会发生什么 — “此网页是为您的浏览器设计的”即将卷土重来!
或者至少,是同样的心态。
特别是 microsoft-edge: 方案的问题在于,微软已将它无处不在地应用于 Windows 10 和 11 中。 大量的链接强制用户使用 Edge,而不是系统默认网络浏览器。 开始菜单搜索会打开 Edge,从您的手机发送的链接会在 Edge 中打开,许多第一方应用程序中的链接会强制您使用 Edge,而且整个操作系统的帮助链接都会强制您使用 Edge。
疯狂的是,为什么将此留给各个浏览器来支持。 它应该将此行为传递给操作系统来处理。 现在我们有各种外观和行为不同的实现,而这只是针对支持它的浏览器而言。
就个人而言,如果由我决定是否允许浏览器在另一个浏览器中打开链接,我会直接忽略它,并将链接前缀解释为 https。
这看起来就像是从深层链接(通用链接)中衍生出来的一种黑暗模式。 非浏览器应用程序也使用这些链接;例如,自托管的 Sketch 库就是这么工作的。
我想知道这是否就是为什么我的三星 S9 有时应用程序等会打开三星互联网浏览器,而不是谷歌 Chrome(默认浏览器)的原因?
自定义浏览器方案机制是应用程序互操作性的基础,并且不限于浏览器 — 它对原生应用程序也很好用。 我认为操作系统和浏览器应该尊重它。 如果网络应用程序滥用它,那就是开发人员的错误,而不是操作系统的错误,也不是浏览器的错误。