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

时间:2013-04-04 18:28:15

标签: javascript window.open

在Chrome中,会在新标签页中打开:

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

这将在一个新窗口中打开(但我希望这也可以在新标签页中打开:

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

这可行吗?

8 个答案:

答案 0 :(得分:146)

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

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

修改

更详细的解释:

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

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

3. 如果window.open调用不属于用户启动的事件,则会在新窗口中打开。

4. “用户启动的事件”不必进行相同的函数调用 - 但它必须来自用户点击的函数

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

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

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

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

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

答案 1 :(得分:33)

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

例如:

$("#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。瞧,如果用户喜欢,我们会强制使用标签。

答案 2 :(得分:11)

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

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

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

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

答案 3 :(得分:10)

如果你使用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/

答案 4 :(得分: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';

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

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

答案 5 :(得分:3)

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

答案 6 :(得分:0)

您可以使用此代码在新标签页中打开..

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

我是从stackoverflow获得的..

答案 7 :(得分:-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函数