Javascript Window.open在选项中包含noopener时忽略高度和宽度

Javascript Window.open在选项中包含noopener时忽略高度和宽度,javascript,html,window.open,Javascript,Html,Window.open,我一直试图通过window.open函数指定弹出窗口的宽度和高度。但是,只要我在选项中包含noopener,Chrome上的宽度和高度就会被忽略 下面是我正在使用的代码,在本例中,窗口以指定的维度打开 但是,一旦我在选项中包括noopener,它就会忽略尺寸集 document.querySelector('[data-frame]').addEventListener('click', function(e) { e.preventDefault(); window.open(

我一直试图通过
window.open
函数指定弹出窗口的宽度和高度。但是,只要我在选项中包含
noopener
,Chrome上的宽度和高度就会被忽略

下面是我正在使用的代码,在本例中,窗口以指定的维度打开

但是,一旦我在选项中包括
noopener
,它就会忽略尺寸集

document.querySelector('[data-frame]').addEventListener('click', function(e) {
  e.preventDefault();
  window.open(
    'https://facebook.com',
    'facebook-window',
    'width=600,height=400,scrollbar=yes,noopener' // <-- this
  );
});
document.querySelector(“[数据框]”).addEventListener('click',函数(e){
e、 预防默认值();
打开窗户(
'https://facebook.com',
“facebook窗口”,

“宽度=600,高度=400,滚动条=yes,noopener”/我深入查看了窗口的文档。打开函数,最后找到了一个解决方法:

let fbWindow = window.open(
    '',
    'facebook-window',
    'width=600,height=400,scrollbar=yes'
);

fbWindow.opener = null;
fbWindow.location = 'https://facebook.com';
其工作原理如下:

  • 我们创建一个带有所需属性和空白URL的弹出窗口
  • 通过编程,我们将创建的弹出窗口的属性opener更改为null
  • 完成所有操作后,我们将窗口的位置更改为所需的位置(如果之前这样做,我们将遇到一个跨原点错误)

  • PS:请注意,这在JSFIDLE上不起作用,因为它是沙盒的。

    有什么原因不能将其作为一个新选项卡打开吗?(例如,一个真正的链接,或者一个JS创建的
    a
    ,您给target=“\u blank”,添加到文档中,单击,然后再次从文档中删除),这样您就可以获得所有的安全模型“在一个新标签页中打开某些内容”这些天来浏览器免费提供,作为奖励,导航操作最终会出现在浏览历史记录中。好问题@Mike'Pomax'Kamermans,我实际上建议在新标签页中打开,但客户端坚持使用它作为弹出窗口打开_(ツ)_/''它尊重Firefox中我的宽度和高度。
    noopener
    并不是这样做的,它只是让你无法访问在你的代码中打开的窗口,所以你无法控制窗口。Chromium bug tracker在2019年10月报告了这个bug,到2020年10月它仍然可用。谢谢,做得好!这是最重要的错误目前的答案是正确的,并且与旧的浏览器兼容。但是,请注意,在Chrome中,这具有较小的“隔离性”"对打开的窗口的影响。新窗口在同一进程中运行。您还保留指向
    fbWindow
    的指针,根据规范,这是特定于实现的,但当设置
    noopener
    标志时,Chrome当前不会返回窗口指针。这是一个误导性的解决方案。noopener与window.opener=null非常不同。如果您可以使用window.opener=null,我认为在大多数情况下,您可以完全不接触它。noopener本身就意味着隔离,即“opener”不引用弹出窗口,反之亦然。因此,您无法更改其他窗口的状态(例如dom)这给了浏览器更好的优化自由度,例如在不同的进程中运行弹出窗口,从而可以更好地放大渲染性能。