【问题标题】:Allow window.open to open new window and not popup允许 window.open 打开新窗口而不弹出
【发布时间】:2013-02-01 09:19:09
【问题描述】:

我有这个 JS 代码:

window.open(loginurl, '_blank');

来自一个条件,例如:

if (userloggedin) {

//popup another page

} else {

window.open(loginurl, '_blank');

}

“loginurl”是我想在新窗口中打开的登录网址。

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

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

我正在寻找方法,但我从未找到解决方案。如果有人可以提供一些提示或见解。将不胜感激。

谢谢。

【问题讨论】:

  • 如果用户点击页面上的某处,这不应被阻止,例如在链接上并使用此链接打开一个弹出窗口...或者您可能需要进行一些黑帽 JS/FLASH 黑客攻击

标签: javascript jquery


【解决方案1】:

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

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

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

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

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

这将被阻止:

$(document).ready(function() { window.open('http://stackoverflow.com') });

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

【讨论】:

  • 应该 $('a').on('click.open' 只是 $('a').on('click' - 我已经进行了快速搜索,但没有遇到像 click.open 这样的事件作为 jQuery 中的事件(尽管您的示例确实有效)?
  • @BarryKaye 'click.open' 是一个命名空间点击事件处理程序。 ('click' 是事件并且 'open' 命名空间。这意味着,例如,如果您想取消绑定它而不取消绑定同一元素上的任何其他点击事件,您可以通过调用 $('a').off('click.open') 来实现。
【解决方案2】:

这种方式不会阻止您的弹出窗口:

$.ajax({
    url:"url",
    dataType: "text",
    cache: false,
    success: function(data){
        window.open('url','_self');
   }
});

【讨论】:

  • 这不是弹出窗口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多