允许window.open打开新窗口而不是弹出窗口

Eme*_*ngo 7 javascript jquery

我有这个JS代码:

window.open(loginurl, '_blank');
Run Code Online (Sandbox Code Playgroud)

来自一个条件,例如:

if (userloggedin) {

//popup another page

} else {

window.open(loginurl, '_blank');

}
Run Code Online (Sandbox Code Playgroud)

"loginurl"是我想在新窗口中打开的登录URL.

问题:这将在大多数浏览器(Firefox和Chrome)中被阻止,因为它的行为类似于弹出窗口.

我想要一个仍然利用我的登录URL变量的解决方案(不改变if else语句),在新窗口中打开它,不会有任何被阻止弹出窗口的警告.

我正在寻找方法,但我从未找到解决方案.如果有人可以提供一些提示或见解.这将是高度赞赏的.

谢谢.

Bea*_*rtz 11

window.open没有启动用户操作的情况下触发该功能时,打开的窗口将始终被视为浏览器阻止的弹出窗口.

这意味着,例如,这些不会被阻止:

$('a').on('click.open', function(e) { e.preventDefault(); window.open('http://disney.com') });
Run Code Online (Sandbox Code Playgroud)

Chrome甚至允许其他事件触发弹出窗口,而firefox不允许这样做:

$(document).on('keydown', function(e) { window.open('http://stackexchange.com') });
Run Code Online (Sandbox Code Playgroud)

这将被阻止:

$(document).ready(function() { window.open('http://stackoverflow.com') });
Run Code Online (Sandbox Code Playgroud)

因此,除非您在window.open用户操作后触发,否则您永远无法确定您的窗口是否会被阻止.

  • @BarryKaye'Click.open'是一个命名空间的点击事件处理程序.('click'是事件并'打开'命名空间.这意味着,例如,如果你想解除绑定而不解除同一元素上的任何其他点击事件,你可以通过调用`$('a')来实现.off( 'click.open')`. (2认同)