32

我正在开发一个利用 JavaScriptalert()confirm()对话框的网络应用程序。

如何阻止 Chrome 显示此复选框?

有可以修改的设置吗?

我知道我可以修改源代码,但我希望 Chrome 仍然可以自动更新。

我不需要担心其他浏览器,因为该应用程序仅在 Chrome 中运行。

我对运行该应用程序的 (Windows) 计算机具有管理员访问权限。

4

6 回答 6

42

你不能。这是一项浏览器功能,可防止网站显示数百条警报以阻止您离开。

但是,您可以查看jQuery UI Dialog之类的模态弹出窗口。这些是显示自定义对话框的 javascript 警报框。他们不使用默认alert()功能,因此完全绕过了您遇到的问题。

我发现如果您使用自定义对话框而不是默认的警报和确认,具有大量消息框和确认的应用程序具有更好的用户体验。

于 2012-07-30T21:25:48.740 回答
10

这就是我最终要做的事情,因为我们有一个网络应用程序,它有多个不受我们控制的用户......(@DannyBeckett 我知道这不是你问题的确切答案,但正在看的人您的问题可能会因此有所帮助。)您至少可以检测他们是否没有看到对话框。您最可能想要更改的内容很少,例如显示时间或实际显示的内容。请记住,这只会通知用户他们已设法单击那个小复选框。

window.nativeAlert = window.alert;
window.alert = function (message) {
    var timeBefore = new Date();
    var confirmBool = nativeAlert(message);
    var timeAfter = new Date();
    if ((timeAfter - timeBefore) < 350) {
        MySpecialDialog("You have alerts turned off");
    }
}

window.nativeConfirm = window.confirm;
window.confirm = function (message) {
    var timeBefore = new Date();
    var confirmBool = nativeConfirm(message);
    var timeAfter = new Date();
    if ((timeAfter - timeBefore) < 350) {
        MySpecialDialog("You have confirms turned off");
    }
    return confirmBool;
}

显然我已将时间设置为 3.5 毫秒。但是经过一些测试,我们只能在大约 5 毫秒内单击或关闭对话框。

于 2014-05-16T14:12:21.290 回答
7

我知道每个人在道德上都反对这一点,但我知道在需要这样做的地方有实际开玩笑的原因。我认为 Chrome 对此采取了坚定的立场,在警报消息之间强制执行一秒钟的间隔时间。如果访问者被困在烦人的恶作剧网站上,这给了访问者足够的时间来关闭页面或刷新。

因此,要回答您的问题,这完全是时间问题。如果您每秒发出多次警报,Chrome 将创建该复选框。这是一个解决方法的简单示例:

var countdown = 99;
function annoy(){
    if(countdown>0){
        alert(countdown+" bottles of beer on the wall, "+countdown+" bottles of beer! Take one down, pass it around, "+(countdown-1)+" bottles of beer on the wall!");
        countdown--;

        // Time must always be 1000 milliseconds, 999 or less causes the checkbox to appear
        setTimeout(function(){
            annoy();
        }, 1000);
    }
}

// Don't alert right away or Chrome will catch you
setTimeout(function(){
    annoy();
}, 1000);
于 2014-05-07T16:26:10.650 回答
3

您应该更好地使用jquery-confirm 而不是尝试删除该复选框。

$.confirm({
    title: 'Confirm!',
    content: 'Are you sure you want to refund invoice ?',
    confirm: function(){
       //do something 
    },
    cancel: function(){
       //do something
    }
}); 
于 2016-11-01T17:39:51.113 回答
-1

如果用户愿意,您应该让他们这样做(无论如何您都无法阻止他们)。

你的问题是你需要知道他们有然后假设他们的意思是好的,而不是取消。替换confirm(x)myConfirm(x)

function myConfirm(message) {
    var start = Number(new Date());
    var result = confirm(message);
    var end = Number(new Date());
    return (end<(start+10)||result==true);
}
于 2014-03-23T09:00:09.770 回答
-27
function alertWithoutNotice(message){
    setTimeout(function(){
        alert(message);
    }, 1000);
}
于 2013-02-07T12:28:40.597 回答