JavaScript 在新窗口中打开,而不是选项卡

IT技术 javascript firefox
2021-01-16 05:48:54

我有一个选择框,它会在选择window.open(url)项目时调用默认情况下,Firefox 将在新选项卡中打开该页面。但是,我希望页面在新窗口中打开,而不是在新选项卡中打开。

我怎样才能做到这一点?

6个回答

open调用指定窗口“功能”

window.open(url, windowName, "height=200,width=200");

当您指定宽度/高度时,它将在新窗口而不是选项卡中打开它。

有关所有可能的功能,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window.open#Position_and_size_features

在 FF 11.0 中不再起作用,请参阅我的问题@詹姆士
2021-03-13 05:48:54
在 IE6、FF 3.6、Chrome 9.0 中工作
2021-03-14 05:48:54
好提示。我认为 Opera 仍会在选项卡中打开它:)。
2021-03-27 05:48:54
在今天的浏览器中不起作用。默认情况下,它们都在当前窗口的新选项卡中打开一个新窗口。它还取决于浏览器选项。您无法使用 JavaScript 控制它。
2021-04-02 05:48:54
这不是您将“height=200,width=200”放在新窗口中执行打开的事实。这只是放置额外参数(位置,状态等......没关系)的事实
2021-04-08 05:48:54

您不需要使用高度,只需确保使用_blank, 没有它,它会在新选项卡中打开。

对于空窗口:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

对于特定的 URL:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
完美地工作。还必须在 Firefox 中包含 location=0 。
2021-03-11 05:48:54
在 Firefox 76 和 Internet Explorer 11 等现代浏览器中完美运行。技巧是添加location=0参数。我还建议命名窗口而不是使用_blank目标,以便在用户多次单击打开弹出窗口的元素时再次使用同一个窗口,并链接以focus()使得已经打开的弹出窗口获得焦点:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
2021-03-13 05:48:54
至少在 Chrome 中,location=0当从按钮或锚元素调用 JS 时是必需的。
2021-03-14 05:48:54
但是如果我也想给它一个名字呢?
2021-03-24 05:48:54
@nwbrad 您确定 '_blank' 部分,因为据我所知,当我们不指定任何其他值时,'_blank' 是默认值。在您的情况下,打开一个新窗口而不是新选项卡必须通过向 window.open 函数提供第三个参数来做一些事情。在您的情况下,它是“工具栏=0,位置=0,菜单栏=0”。您可以通过省略第三个参数并将“_blank”留在那里作为第二个参数来验证它。
2021-04-01 05:48:54

我可能是错的,但据我所知,这是由用户的浏览器首选项控制的,我不相信这可以被覆盖。

是的,它有效,但这似乎有点黑客。Firefox 的编写方式是,打开新窗口与选项卡是浏览器首选项,而不是 javascript 首选项。因此,您的建议在更高版本的 Firefox 中不起作用是可行的。我宁愿不依赖黑客。
2021-03-15 05:48:54
我告诉过你我有有效的代码。我在萤火虫控制台中输入: window.open("", "poop", "height=200,width=200,modal=yes,alwaysRaised=yes"); 你猜怎么着???有用!!!!!!
2021-03-16 05:48:54
需要明确的是,我并不是说这是一个 javascript hack。添加窗口高度和宽度显然是 js window.open 方法(w3schools.com/HTMLDOM/met_win_open.asp)的特征,我的意思是在操纵 firefox 预期行为的意义上 hack。
2021-03-20 05:48:54
就其本身而言,我不会真正称其为黑客。你只是在你真正想要拥有的行为上妥协,然后实现它。
2021-03-20 05:48:54
你是对的,用户可以将“about:config”首选项“browser.tabs.opentabfor.windowopen”设置为true,但这是一个全局设置,我不想改变我们用户浏览器的全局行为;)
2021-04-08 05:48:54

尝试:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

我有一些代码可以做你所说的,但是里面有很多参数。我认为这些是最低限度的,如果它不起作用,请告诉我,我会发布其余的。

我可以知道,[窗口名称] 是什么?
2021-03-22 05:48:54
经过更多测试,似乎几乎所有参数——只要至少有一个——都会打开一个新窗口而不是选项卡。例如,“top=0”甚至适用于 FF 31 和 Chrome 36。这是在 OpenBSD 上使用 cwm 窗口管理器。所以结果可能会有所不同。
2021-03-29 05:48:54
这仅适用于 FF 31 和 Chrome 36,仅使用“modal=yes”选项。指定的所有选项也都有效。我还在我的 FF 首选项中选中了“在新选项卡中打开新窗口”。如果没有打开选项,窗口会在新选项卡中打开。
2021-04-03 05:48:54

好的,经过大量测试后,我的结论是:

当您执行:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

或者您在目标字段中放置的任何内容,这都不会改变:新页面将在新选项卡中打开(因此取决于用户偏好)

如果要在新的“真实”窗口中打开页面,则必须添加额外的参数。喜欢:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

经过测试,您使用的额外参数似乎并不重要:这不是您放置“这个参数”或“另一个”创建新“真实窗口”的事实,而是存在新参数的事实)。

但有些东西令人困惑,可能会解释很多错误的答案:

这个:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

和这个:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

不会给出相同的结果。

在第一种情况下,当您第一次打开一个没有额外参数的页面时,它将在一个新选项卡中打开在这种情况下,由于您提供的名称,第二个调用也将在此选项卡中打开

在第二种情况下,由于您的第一次调用是使用额外参数进行的,因此页面将在新的“真实窗口”中打开在这种情况下,即使在没有额外参数的情况下进行第二次调用,它也会在这个新的“真实窗口”中打开……但相同的选项卡!

这意味着第一次调用很重要,因为它决定了页面的放置位置。

这个答案应该有很多++++
2021-03-14 05:48:54