Chrome在没有任何用户干预的情况下立即取消了Confirm()提示

时间:2018-07-09 16:48:06

标签: javascript google-chrome confirm

我们网站的某些用户报告confirm对话框出现了,但立即消失了,就好像它们被自动关闭一样。这似乎只影响Chrome,不影响其他浏览器(甚至不影响Chromium)。

搜索类似问题发现许多人抱怨confirm中的onbeforeunload对话框,但这不是我的问题:在这种情况下,这不是 。最初加载页面时(由jQuery confirm触发)显示$(document).ready()对话框。

Chrome documentation显示confirm不会激活其选项卡,并且在切换选项卡时将被关闭。很好:该标签页已经处于活动状态(页面加载时会显示confirm对话框),我很高兴在切换标签页后将其取消。问题是它被立即关闭,没有任何用户交互。

我找到了one similar report,但是在那种情况下,confirm提示从来没有出现过。看来我们所看到的有所不同。

$(document).ready(function() {
var c = confirm('Are you sure you wish to delete this entry?');
if (c) {
    $.ajax(
        '/api/show/competition/delete',
        {
            'method': 'POST',
            'data': { 'id' : 9 },
            'dataType': 'json',
            'complete': function(response, status) {
                if (response.responseJSON.error) {
                    alert(response.responseJSON.message);
                    window.location.reload();
                } else {
                    document.location.href = "/show/application/competition";
                }
            }
        }
    );
} else {
    document.location.href = "/show/application/competition/entry/9";
}
});

如果需要,我们可以使用jQuery模态窗口,但是使用整个库替换一行代码似乎很愚蠢。无论如何,本机浏览器警报在移动浏览器中看起来总是更好。

5 个答案:

答案 0 :(得分:2)

我有完全一样的问题。这似乎是一个镀铬的问题。

这需要技巧。 就我而言,它通过使用setTimeout函数设置0.1秒的延迟来工作。

尝试一下。它将起作用。

NUM_FOR_YEAR

答案 1 :(得分:1)

就我而言,问题是由iframe引起的。我有一个youtube视频iframe,并且警报在显示后将关闭几毫秒。删除iframe后,一切恢复正常。

答案 2 :(得分:1)

就我而言,Facebook再营销像素是问题的根源。

答案 3 :(得分:0)

在我的情况下,单击事件功能中出现了用于确认对话框的问题。用“鼠标”代替“点击”即可解决问题。

答案 4 :(得分:0)

添加超时的一种稍微优雅但有效的方法是包括一个类似underscore.js的库,并以大约100ms的时间对处理函数进行去抖动。如果您拥有iFrame,则可能不是这种情况,但是如果没有iFrame,这绝对是一个问题,对我而言这立即起作用。

$("#my-selector").on("click", _.debounce(handleClick, 100));