如何知道javascript中是否禁用了模式框(警报、提示、确认…)?

如何知道javascript中是否禁用了模式框(警报、提示、确认…)?,javascript,modal-dialog,Javascript,Modal Dialog,我有一个基于web的私人应用程序,有时我会真诚地询问用户在特定情况下想做什么。为此,我使用了javascript的confirm函数 与任何其他模式框一样,在弹出几个窗口后,用户可以选择通过单击小框来禁用它们,如下所示: 问题是,如果他们单击一次,他们就永远看不到其他消息和对confirm的响应,这是假定的0,这是令人困惑的,因为基本上这意味着所有需要他们确认的操作都会在没有警告的情况下取消!刷新页面没有帮助,他们必须先关闭页面,然后重新打开页面才能再次工作 我能检测到他们什么时候勾选了那个小

我有一个基于web的私人应用程序,有时我会真诚地询问用户在特定情况下想做什么。为此,我使用了javascript的
confirm
函数

与任何其他模式框一样,在弹出几个窗口后,用户可以选择通过单击小框来禁用它们,如下所示:

问题是,如果他们单击一次,他们就永远看不到其他消息和对
confirm
的响应,这是假定的
0
,这是令人困惑的,因为基本上这意味着所有需要他们确认的操作都会在没有警告的情况下取消!刷新页面没有帮助,他们必须先关闭页面,然后重新打开页面才能再次工作


我能检测到他们什么时候勾选了那个小方框吗?

你对此无能为力。这是一种浏览器功能

您可以查看时间安排-

这建议执行以下操作:

function myConfirm(message){
    var start = new Date().getTime();
    var result = confirm(message);
    var dt = new Date().getTime() - start;
    // dt < 50ms means probable computer
    // the quickest I could get while expecting the popup was 100ms
    // slowest I got from computer suppression was 20ms
    for(var i=0; i < 10 && !result && dt < 50; i++){
        start = new Date().getTime();
        result = confirm(message);
        dt = new Date().getTime() - start;
    }
    if(dt < 50)
       return true;
    return result;
}
函数myConfirm(消息){
var start=new Date().getTime();
var结果=确认(消息);
var dt=new Date().getTime()-start;
//dt<50ms表示可能的计算机
//当我期待弹出窗口时,我能得到的最快速度是100毫秒
//我从计算机抑制中得到的最慢速度是20毫秒
对于(var i=0;i<10&&!result&&dt<50;i++){
开始=新日期().getTime();
结果=确认(消息);
dt=新日期().getTime()-开始;
}
如果(dt<50)
返回true;
返回结果;
}

选中该框后,对话框立即“关闭”。您可以检查该框是否异常快速关闭:

function dialog(message, success, failure) {
    var open_time = new Date();
    var result = alert(message);
    var close_time = new Date();

    if (close_time - open_time < 10) {
        failure();
    } else {
        success(result);
    }
}

dialog('Hello', function(result) {
    // The dialog probably was closed by the user
}, function() {
    // The dialog was closed really fast.
    // Either the user was typing while it popped up or the browser didn't
    //  display it in the first place
});
功能对话框(消息、成功、失败){
var open_time=新日期();
var结果=警报(消息);
var close_time=新日期();
如果(关闭时间-打开时间<10){
失败();
}否则{
成功(结果);
}
}
对话框('Hello',函数(结果){
//该对话框可能已被用户关闭
},函数(){
//对话很快就结束了。
//要么用户在弹出时正在键入,要么浏览器没有
//首先显示它
});
尽管仅仅使用CSS和HTML来创建模式对话框可能会更容易,跨浏览器和平台也更一致。我个人不喜欢Chrome的方法

演示:


我查看了Chromium的源代码,该属性没有存储在任何地方,因此似乎没有一些Chromium特定的属性可供查看。

您是否必须使用
警报
确认
?理想情况下,您只需要使用页面内模式系统?比如为什么不使用CSS对话框而不是
confirm()
?我不想阻止它,我想知道用户何时单击了框CSS是一种本机功能。如果您想控制用户体验,请使用HTML、CSS和Javascript。@loganfsmyth模态对话框的概念自用户界面出现以来就存在了。除非你滥用它,否则它不会令人讨厌。我个人认为它没有任何问题,我只是想知道用户何时禁用了它……我不想做任何违背它的事情。我用别人的建议更新了我的回复——我认为这在这里是有意义的。抱歉给你带来困惑。谢谢你的意见。但是有没有办法确定呢?@NisargShah:没有