当前位置: 首页 > 面试题库 >

Ajax请求后的Chrome window.open就像弹出窗口一样

戈建白
2023-03-14
问题内容

我遇到一种情况,当用户按下按钮时,我会执行ajax请求,然后使用ajax请求的结果生成要在新选项卡中打开的URL。但是,在chrome中,当我在ajax请求的成功处理程序中调用window.open时,它将在新窗口中像弹出窗口一样打开(并被popup-
blockers阻止)。我的猜测是,由于成功代码与chrome认为不是由点击触发的点击处理代码是异步的,即使它与点击有因果关系。有什么方法可以防止这种情况,而无需使ajax请求同步?

编辑 以下是一些最小的代码来演示此行为:

$('#myButton').click(function() {
    $.ajax({
        type: 'POST',
        url: '/echo/json/',
        data: {'json': JSON.stringify({
            url:'http://google.com'})},
        success: function(data) {
            window.open(data.url,'_blank');
        }
    });
});

http://jsfiddle.net/ESMUA/2/

需要澄清的一点是:我更担心它是在单独的窗口而不是选项卡中打开,而不是因为它被弹出窗口阻止程序阻止了。


问题答案:

尝试添加

window.open(url,'_blank');

编辑

好吧,我认为打开不是用户操作直接结果(即非异步)的页面时,您无法绕开弹出窗口阻止程序。

您可以尝试执行以下操作,它看起来像是弹出窗口阻止程序的用户操作:

var $a = $('<a>', {
        href: url,
        target: '_blank' 
    });

$(document.body).append($a);
$a.click();

编辑2

看起来您最好保持事物同步。

只要新窗口是“相同来源”,您就可以使用JS进行操作。

$('#a').on('click', function(e){
    e.preventDefault();
    var wi = window.open('about:blank', '_blank');

    setTimeout(function(){ // async
        wi.location.href = 'http://google.com';
    }, 500);
});


 类似资料:
  • 我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。

  • 我的网页有剑道网格加载图像和一个“图形地图”按钮。 我提供了一个最小化的版本,我的观点如下 关于显示图 在这种情况下,我得到错误[请求Uri太长414]。 > 尽管窗口在同一视图中,但为什么kendoWindow将此数据作为查询字符串? 如何纠正此问题?

  • 问题内容: 我想使用Firefox浏览器,使用RSelenium从网站下载文件。我正确地完成了所有操作(导航,选择正确的元素并写下我想要的内容);现在,我单击“下载”按钮,然后打开一个Firefox弹出窗口,并询问我是否要下载文件或“用…打开”。 不幸的是,由于隐私限制,我无法编写示例。 我的问题是:如何在需要时切换到弹出窗口/警报并单击“确定”? 我尝试了以下方法,但均未成功: 我也试过了 但是

  • Popup 是一种可以包含任何Html内容的弹出窗口,从App的主内容区域上弹出。 Popup 和其他所有的遮罩图层一样,是所谓的“临时视图”的一部分。 Popup 布局 Popup 布局相当简单. 你所需要做的就是将放到 body 里正确的位置上: <div class="modal modal-no-buttons"> ... <div class="popup"> An

  • 问题内容: 因此,我一直在用Qt为我的Python应用程序创建GUI。我现在遇到的情况是,按下按钮后,将执行适当的推迟操作,我们执行一些任务,然后需要打开一个单独的窗口,其中包含一两个东西。但是我似乎无法弄清楚如何创建这个新的单独窗口。谁能给我一个如何创建一个例子吗? 问题答案: 一个使您抓狂的常见错误是忘记将创建的弹出窗口的句柄存储在将保持活动状态的python变量中(例如,存储在主窗口的数据成

  • 我的默认设置上有一个按钮。启动“条款和条件”模式弹出窗口(popup1)的aspx。然后,我在模式弹出窗口上有一个按钮,在顶部(我的条款和条件第2页)启动另一个模式弹出窗口(popup2)。 我想添加一个后退按钮到modalpopup2关闭popup2,并显示modalpopup1,所以用户有从popup2前进/后退选项。 我添加了“纽扣背”,并尝试。。。 但这只是重定向回我的默认设置。aspx。