使用自定义协议或网址方案时,window.open()方法会在Google Chrome浏览器中打开空白页

时间:2019-06-21 17:07:59

标签: javascript google-chrome chromium mozilla

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

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

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

这将打开一个标签或窗口(基于浏览器设置),并打开google.com。

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

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

Chrome Console 然后,打开带有“关于:空白” 的空白标签。这种现象似乎仅发生在chrome上,Mozilla似乎对两种URL方案都起作用。

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

1 个答案:

答案 0 :(得分:1)

我不得不删除以前的答案,建议您在打开链接时使用变量声明,这将导致新窗口在地址栏中包含url,但实际上并未访问它。

我建议这是Google Chrome的一项安全功能,它拒绝访问http,https,ftp和文件以外的协议

很遗憾,我在官方文档中找不到此文件,但是您会发现使用URL()创建位置会得到预期的结果

<div id='my-player' class="video-wrapper">
  <video  class="video-js" controls data-setup='{"fluid": true}'>
    <source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4">
    <source src="http://techslides.com/demos/sample-videos/small.ogv" type="video/ogv">
    <source src="http://techslides.com/demos/sample-videos/small.webm" type="video/webm">
  </video>
  <a class="video-button" id="video-play">></a>
</div>

返回

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

但是,谷歌浏览器会拒绝更新

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

如果返回错误消息但不返回错误消息会很好。您还会发现,使用新的URL()可以支持受支持的协议。

希望有帮助。如果我在官方文档中找到了确凿的证据,则将更新此答案,但我可以肯定,谷歌对chrome的高安全性方法是无法实现此目的的原因