当我在有效的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上,Mozilla似乎对两种URL方案都起作用。
Chrome是否存在任何持续的问题,或者这应该如何工作?
答案 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的高安全性方法是无法实现此目的的原因