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

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

我怎样才能做到呢?

582791 次浏览

你不需要这么做。允许用户拥有他们想要的任何首选项。

Firefox默认是这样做的,因为在一个新窗口中打开一个页面很烦人,如果用户不希望页面这样做,就不应该允许页面这样做。(Firefox允许你在新窗口中打开标签,如果你这样设置的话)。

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

试一试:

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

我有一些代码,做什么你说,但有很多参数。我认为这些是最低限度的,如果它不起作用,请告诉我,我会张贴剩下的。

指定窗口“功能”;open调用:

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

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

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

你不需要使用height,只要确保你使用_blank,没有它,它会在一个新选项卡中打开。

对于空窗口:

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

对于特定的URL:

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

你可以试试下面的函数:

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

执行的HTML代码:

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

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

这是我的新号召:

 window.open(url, windowName, '');

关键是参数:

如果你提供 Parameters [Height="", Width=""],那么它将在新窗口中打开。

如果你不提供参数,那么它将在新选项卡中打开。

在Chrome和Firefox中测试

在这里回答说。但再次发布,以供参考。

window.open()将不会在新选项卡中打开,如果它不是发生在实际的单击事件。在这个例子中,url是在实际点击事件中被打开的。这将工作提供用户在浏览器中有适当的设置。

<a class="link">Link</a>
<script  type="text/javascript">
$("a.link").on("click",function(){
window.open('www.yourdomain.com','_blank');
});
</script>

类似地,如果你试图在click函数中进行ajax调用,并希望在成功时打开一个窗口,请确保你正在使用async : false选项集进行ajax调用。

试试这个方法.....

function popitup(url) {
//alert(url);
newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
newwindow.moveTo(350,150);
if (window.focus)
{
newwindow.focus()
}
return false;
}

我认为这不是html目标属性问题,但你在“选项”菜单下的“选项卡”选项卡中选中了“在新选项卡中打开nw窗口”选项。请检查并重试。

enter image description here

我也有同样的问题,但我找到了一个相对简单的解决方法。

在JavaScript中,我正在检查window.opener !=null;,以确定窗口是否弹出。如果你正在使用一些类似的检测代码来确定你的网站正在渲染的窗口是否是一个弹出窗口,当你想要使用新的windows JavaScript打开一个“新”窗口时,你可以很容易地"turn it off"

只要把它放在你的页面顶部,你想始终是一个“新”窗口。

<script type="text/javascript">
window.opener=null;
</script>

我在我的网站的登录页面上使用这个,所以如果用户使用弹出窗口导航到我的网站,他们就不会弹出窗口。

您甚至可以创建一个简单的重定向页面来执行此操作,然后移动到您提供的URL。类似的,

父页上的JavaScript:

window.open("MyRedirect.html?URL="+URL, "_blank");

然后通过使用在这里中的javascript,你可以获得URL并重定向到它。

重定向页面上的JavaScript:

 <script type="text/javascript">
window.opener=null;


function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}


function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}


var params = getSearchParameters();
window.location = params.URL;
</script>

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

表演时:

     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');

不会得到相同的结果。

在第一种情况下,当你第一次打开一个页面没有额外参数时,它将在一个新的选项卡中打开。在这种情况下,第二个调用也将在这个选项卡中打开,因为你给出的名称。

在第二种情况下,由于您的第一次调用是额外参数,页面将以一个新的“真正的窗口”打开。在这种情况下,即使第二次调用没有额外的形参,它也会在这个新的"真正的窗口"…但是同样的账单!

这意味着第一次调用很重要,因为它决定将页面放在哪里。

我刚刚尝试了IE(11)和Chrome(54.0.2794.1金丝雀SyzyASan):

window.open(url, "_blank", "x=y")

... 它打开了一个新的窗口。

这意味着克林特pachl是正确的,当他说提供任何一个参数将导致新窗口打开。

——显然,它不必是一个合法的参数!

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

我刚刚注意到,在IE中,窗口没有任何装饰。

对我来说,解决办法就是

"location=0"

在第三个参数中。在最新的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');