新标签中的Chrome,Javascript,window.open

And*_*rew 109 javascript window.open

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

<button onclick="window.open('newpage.html', '_blank')" />
Run Code Online (Sandbox Code Playgroud)

这将在一个新窗口中打开(但我也想在新标签页中打开它:

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>
Run Code Online (Sandbox Code Playgroud)

这可行吗?

Pra*_*ati 148

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

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

编辑:

更详细的解释:

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

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

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

4. "用户启动的事件"不必具有相同的函数调用 - 但它必须源自用户单击调用的函数

5.如果用户启动事件委托或推迟函数调用(在未绑定到click事件的事件侦听器或委托中,或者例如使用setTimeout),则它将其状态丢失为"用户启动"

6.某些弹出窗口阻止程序将允许从用户启动的事件打开窗口,但不允许打开其他窗口.

7.如果阻止了任何弹出窗口,阻塞者通常允许的那些(通过用户启动的事件)有时也会被阻止.一些例子…

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

window.open('page.php', '', 'width=1000');
Run Code Online (Sandbox Code Playgroud)

以下将被视为用户启动的事件,即使它调用另一个函数:

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);
Run Code Online (Sandbox Code Playgroud)

以下不符合用户启动的事件,因为setTimeout推迟了它:

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);
Run Code Online (Sandbox Code Playgroud)

  • *"如果window.open调用不是用户启动的事件的一部分,它将在新窗口中打开."*不,它几乎肯定不会被打开. (3认同)
  • 截至2014年9月29日,当js调用使用_blank作为窗口名称时,最新的Firefox ESR和IE 11在新窗口中打开_blank或window.open链接.目前的Chrome并不那么简单.我测试了打开一个新的窗口,通过顶部,左侧,宽度,高度,工具栏,位置,目录,状态,菜单栏,滚动条和可调整大小,并依次省略其中的每一个.除非省略status,菜单栏或滚动条,否则Chrome会在新标签中全部打开它们.这似乎很随意,很难相信,但凭经验,这就是发生的事情.示例:http://jsbin.com/mobiyeqojaha/1 (3认同)
  • 我只想通过在Chrome和FF中测试来添加,我发现在您定义为"用户启动的事件"时使用window.open可以保持浏览器的默认操作.我的意思是,如果在Chrome中你持有chrome转换并点击一个新的浏览器窗口将会出现,如果你按住ctrl(或按鼠标中键),新的标签将在后台打开.这是非常好的,你可以做一些事情而不需要全部放置锚标签. (2认同)

小智 34

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

例如:

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

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

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

我们打开新的浏览器窗口或创建新选项卡,由用户启动的按钮单击中的用户首选项确定.然后我们在从AJAX帖子返回后将位置设置为所需的URL.瞧,如果用户喜欢,我们强制使用标签.


Nic*_*ann 11

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

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

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

如果您无法控制用户正在使用的浏览器,则使用此功能是一个坏主意.它可能无法在将来的版本或不同的设置中使用.

  • 对于那些想知道,运行此代码片段不起作用,因为这个错误:`VM646 js:12在新窗口中阻止打开'http://www.stackoverflow.com/',因为请求是在沙盒框架中进行的'allow-popups'权限未设置 (2认同)

Moh*_*eer 11

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

试试这个,

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

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

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


Mag*_*gne 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';
Run Code Online (Sandbox Code Playgroud)

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

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