JavaScript在新窗口中打开,而不是标签

ada*_*dam 357 javascript firefox

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

我怎么能做到这一点?

DNS*_*DNS 449

给窗口一个'specs'参数,宽度/高度.请参阅此处了解所有可能的选项.

window.open(url, windowName, "height=200,width=200");
Run Code Online (Sandbox Code Playgroud)

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

  • 在今天的浏览器中不起作用.默认情况下,它们都会在当前窗口的新选项卡中打开一个新窗口.它还取决于浏览器选项.您无法使用JavaScript控制它. (14认同)
  • 在IE6,FF 3.6,Chrome 9.0中工作 (7认同)
  • 好小费.我认为Opera仍将在一个标签中打开这个:). (5认同)
  • 在FF 11.0中不再起作用,[见我的问题](http://stackoverflow.com/questions/9956827/window-openurl-windowname-opts-opens-in-new-tab-instead-of-new-窗口在杉)!@詹姆士 (3认同)
  • 这不是你在新窗口中执行"height = 200,width = 200"的事实.这只是放置额外参数的事实(位置,状态等......无关紧要) (3认同)
  • 不认为它适用于FF或Chrome(两者的beta版本,但不知道关于非beta的行为). (2认同)

小智 108

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

对于空窗口:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');
Run Code Online (Sandbox Code Playgroud)

对于特定的URL:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果我想给它起个名字怎么办? (3认同)
  • +1非常好.这正是我在寻找的东西:-) (2认同)

Jor*_*nes 82

我可能错了,但据我所知,这是由用户的浏览器偏好控制的,我不相信这可以被覆盖.

  • 我告诉过你我的代码有效.我将它键入firebug控制台:window.open("","poop","height = 200,width = 200,modal = yes,alwaysRaised = yes"); 你猜怎么着???有用!!!!!! (44认同)
  • 是的它有效,但这似乎有点像黑客.Firefox的编写方式是打开新窗口vs tab是浏览器首选项,而不是javascript首选项.因此,您的建议在较新版本的Firefox中不会起作用是可行的.我宁愿不依赖黑客. (24认同)
  • 要明确的是,我并不是说这是一个javascript hack.添加窗口高度和宽度显然是js window.open方法的特征.开放方法(http://www.w3schools.com/HTMLDOM/met_win_open.asp)我的意思是操纵firefox的预期行为. (2认同)
  • 我本不会把它称为黑客攻击.你只是在妥协你真正喜欢的行为,而是实现它. (2认同)

小智 15

尝试:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");
Run Code Online (Sandbox Code Playgroud)

我有一些代码可以说你的意思,但其中有很多参数.我认为这些是最低限度的,让我知道如果它不起作用,我会发布其余的.


Pet*_*ter 10

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

执行时:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');
Run Code Online (Sandbox Code Playgroud)

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

如果您希望在新的"真实"窗口中打开页面,则必须添加额外的参数.喜欢:

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

经过测试,看起来你使用的额外参数,并不重要:这不是你把"这个参数"或"另一个"创建新的"真实窗口"但事实上有新参数的事实(s ).

但有些东西很混乱,可能解释了很多错误的答案:

这个:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
Run Code Online (Sandbox Code Playgroud)

还有这个:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');
Run Code Online (Sandbox Code Playgroud)

不会给出相同的结果.

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

在第二种情况下,当您使用额外参数进行第一次调用时,页面将在新的" 真实窗口 "中打开.在这种情况下,即使第二次调用是在没有额外参数的情况下进行的,它也将在这个新的" 真实窗口 "中打开 ......但是相同的标签!

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


小智 9

您可以尝试以下功能:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>
Run Code Online (Sandbox Code Playgroud)

用于执行的HTML代码:

<a href="#" onclick="open('http://www.google.com')">google search</a>
Run Code Online (Sandbox Code Playgroud)

  • `popup.location = URL;`的目的是什么?`window.open()`调用应该将它打开到正确的URL,并且在你的代码示例中,`URL`没有被定义,因此它将回退到实验(而不是广泛支持)[URL对象]( https://developer.mozilla.org/en-US/docs/Web/API/URL).虽然使用它是有争议的,但我很好奇它在这里使用的动机是什么? (2认同)

Coo*_*une 8

你不应该这样做.允许用户拥有他们想要的任何偏好.

Firefox默认情况下会这样做,因为在新窗口中打开页面很烦人,如果不是用户所希望的话,绝不允许页面这样做.(Firefox允许您在新窗口中打开选项卡,如果您这样设置).

  • 你错了.顺便说一句,说"你不应该"是不恰当的,特别是如果它是老板想要的东西 (30认同)
  • @theman_on_vista:说服你的老板是你的责任.贵公司已授予您解决设计问题的责任.这包括指出错误的设计理念. (17认同)
  • 设计师可以选择弹出窗口或制表符.虽然我是一个总是喜欢标签的用户,但我发现有时候,设计确实需要弹出窗口或真正需要标签.它应该在程序员的领域才能实现.抛开哲学上的差异,这种评论完全不适合编程参考网站.在这种情况下,它不是"我应该吗?" 题.这是"我怎么样?" (12认同)
  • 让我们尽量保持评论的实用性和实用性.我们可以不同意而不是侮辱. (8认同)
  • 如此真实.屏幕属于用户,没有其他人. (2认同)

the*_*eep 6

我刚刚用 IE (11) 和 Chrome (54.0.2794.1 canary SyzyASan) 尝试过:

window.open(url, "_blank", "x=y")
Run Code Online (Sandbox Code Playgroud)

...它在新窗口中打开。

这意味着Clint pachl说得对,提供任何一个参数都会导致新窗口打开。

——显然它不一定是合法的参数!

(YMMV - 正如我所说,我只在两个地方测试了它......并且下一次升级可能会使结果无效,无论如何)

ETA:不过,我刚刚注意到 - 在 IE 中,窗口没有装饰。


DAu*_*tin 6

对我来说,解决方案是

"location=0"
Run Code Online (Sandbox Code Playgroud)

在第三个参数中。在最新的 FF/Chrome 和旧版本的 IE11 上测试

我使用的完整方法调用如下(因为我喜欢使用可变宽度):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
Run Code Online (Sandbox Code Playgroud)


Tom*_*nza 5

有趣的是,我发现如果你为window.open的第三个属性传入一个字符串(而不是空字符串或属性列表),它将在Chrome,Firefox和IE的新选项卡中打开.如果缺席,行为就不同了.

所以,这是我的新电话:

 window.open(url, windowName, '');
Run Code Online (Sandbox Code Playgroud)


Mun*_*niR 5

关键是参数:

如果您提供 参数[Height ="",Width =""],则它将在新窗口中打开.

如果您不提供参数,则它将在新选项卡中打开.

在Chrome和Firefox中测试过