使用自定义协议或 url 方案时,window.open() 方法会在 Google Chrome 中打开一个空白页面

When using custom protocols or url scheme's, the window.open() method opens a blank page in Google Chrome

当我在有效的 https url 方案上使用 window.open(url,'_blank') 时,浏览器会打开一个带有 URL 的新选项卡。

例如 - 在 Chrome 浏览器控制台中执行以下命令:

window.open('https://google.com','_blank')

这将打开一个选项卡或 window(基于浏览器设置)并打开 google.com。

但是,如果我使用自定义协议或 URL 方案如下:

window.open('tryme://helloworld/XXX/VGhpcyBpcyBhIHRlc3QgdXJs==','_blank')

然后打开带有 "about:blank" 的空白选项卡。这种行为似乎只发生在 chrome,Mozilla 似乎适用于 URL 方案。

chrome 是否存在任何持续存在的问题,或者它应该如何工作?

我不得不删除我之前的回答,建议您在打开 link 时使用变量声明,这将导致新的 window 在地址栏中包含 url 但实际上不是访问它。

我建议这是 Google Chrome 拒绝访问除 http、https、ftp 和文件

以外的协议的安全功能

不幸的是,我无法在官方文档中找到它,但是你会发现使用 URL() 创建一个位置你会得到预期的结果

let newLocation = new URL('tryme://helloworld/XXX/VGhpcyBpcyBhIHRlc3QgdXJs==')

returning

{
  ...
  protocol: "tryme:"
  pathname: "//mytest.com"
  ...
}

但是googlechrome会拒绝更新

window.location = newLocation

如果 return 显示一条错误消息但不这样做就好了。您还会发现,使用新的 URL() 将适用于支持的协议。

希望对您有所帮助。如果我在官方文档中找到明确的证据,我会更新这个答案,但我很确定 google chrome 上的高安全性方法是不可能的原因