116

在 chrome 中,这会在新选项卡中打开:

<button onclick="window.open('newpage.html', '_blank')" />

这将在一个新窗口中打开(但我也希望它在新选项卡中打开:

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

这可行吗?

4

8 回答 8

152

您无法直接控制它,因为它是由 Internet Explorer 用户控制的选项。

使用具有不同窗口名称的 Window.open 打开页面将在新的浏览器窗口中打开,如弹出窗口,或者在新选项卡中打开,如果用户配置浏览器这样做。

编辑:

更详细的解释:

1.在现代浏览器中,window.open 将在新选项卡中打开,而不是在弹出窗口中打开。

2.您可以通过在第三个参数中指定选项来强制浏览器使用新窗口('popup')

3.如果 window.open 调用不是用户发起的事件的一部分,它将在新窗口中打开。

4. “用户发起的事件”不必来自同一个函数调用——但它必须源自用户点击调用的函数

5.如果用户发起的事件委托或延迟函数调用(在事件监听器或委托未绑定到点击事件,或使用 setTimeout 例如),它失去其“用户发起”的状态</p>

6.一些弹出窗口拦截器将允许从用户发起的事件中打开窗口,但不允许以其他方式打开的窗口。

7.如果任何弹出窗口被阻止,那些通常由阻止程序(通过用户发起的事件)允许的窗口有时也会被阻止。一些例子……</p>

强制在新浏览器实例中打开窗口,而不是在新选项卡中打开:

window.open('page.php', '', 'width=1000');

以下事件符合用户发起的事件,即使它调用了另一个函数:

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

以下不属于用户发起的事件,因为 setTimeout 推迟了它:

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);
于 2013-04-04T18:32:26.287 回答
35

如果用户喜欢,强制使用选项卡有时很有用。正如上面 Prakash 所说,这有时是由使用非用户发起的事件决定的,但有一些方法可以解决这个问题。

例如:

$("#theButton").button().click( function(event) {
   $.post( url, data )
   .always( function( response ) {
      window.open( newurl + response, '_blank' );
   } );
} );

将始终在新的浏览器窗口中打开“newurl”,因为“always”功能不被认为是用户启动的。但是,如果我们这样做:

$("#theButton").button().click( function(event) {
   var newtab = window.open( '', '_blank' );
   $.post( url, data )
   .always( function( response ) {
      newtab.location = newurl + response;
   } );
} );

我们打开新的浏览器窗口或创建新的选项卡,这取决于用户在按钮单击中的偏好,这是用户启动的。然后我们只需在从 AJAX 帖子返回后将位置设置为所需的 URL。瞧,如果用户喜欢,我们会强制使用选项卡。

于 2013-11-07T21:45:23.047 回答
13

如果您使用window.open(url, '_blank'),它将在 Chrome、Firefox 等上被阻止(弹出窗口阻止程序)

试试这个,

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

为这个http://jsfiddle.net/safeeronline/70kdacL4/2/工作的js小提琴

为ajax窗口工作的js小提琴打开http://jsfiddle.net/safeeronline/70kdacL4/1/

于 2015-05-29T05:28:54.067 回答
11

目前(Chrome 39)我使用此代码打开一个新标签:

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

当然,这可能会在 Chrome 的未来版本中发生变化。

如果您无法控制用户正在使用的浏览器,那么使用它是个坏主意。它可能不适用于未来的版本或不同的设置。

于 2014-10-13T10:45:06.243 回答
6

这将在 Chrome 和 Firefox 的新选项卡中打开链接,可能还有更多我没有测试过的浏览器:

var popup  = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = 'newpage.html';

它基本上会打开一个新的空选项卡,然后设置该空选项卡的位置。请注意,这是一种 hack,因为浏览器选项卡/窗口行为实际上是浏览器和用户的域、责任和选择。

第二行可以在回调中调用(例如,在您完成一些 AJAX 请求之后),但是浏览器不会将其识别为用户发起的点击事件,并且可能会阻止弹出窗口。

于 2014-04-19T12:07:11.567 回答
3

清晰的迷你解决方案$('<form action="http://samedomainurl.com/" target="_blank"></form>').submit()

于 2013-12-19T10:37:05.930 回答
0

您可以使用此代码在新选项卡中打开..

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

我从stackoverflow ..

于 2013-06-11T11:54:20.350 回答
-2

我使用的最佳方式:

1-将链接添加到您的html:

<a id="linkDynamic" target="_blank" href="#"></a>

2-添加JS功能:

function OpenNewTab(href)
{
    document.getElementById('linkDynamic').href = href;
    document.getElementById('linkDynamic').click();
}

3-只需使用您想要的链接调用 OpenNewTab 函数

于 2013-12-25T23:51:12.087 回答