如何在 JavaScript 中判断模态框(警告、提示、确认等)是否已被禁用?

10

我有一个基于Web的私人应用程序,在某些情况下,我会向用户询问他们在特定情况下想要做什么。为此,我使用了JavaScript的 confirm 函数。

像任何其他模态框一样,在弹出几个对话框后,用户可以通过单击如下所示的小框来禁用它们:

enter image description here

问题是,如果他们点击了一次,他们就再也看不到其他消息,而且对 confirm 的响应被认为是 0,这很令人困惑,因为基本上这意味着所有需要他们确认的操作都将被取消且没有警告!刷新页面无效,必须关闭并重新打开才能正常工作。

我能否检测到他们勾选了那个小框?


为什么不使用CSS对话框而不是confirm() - Barmar
我不想阻止它,我想知道用户何时点击了该框。 - Sebas
1
CSS是一种本地特性。如果你想要控制用户体验,使用HTML、CSS和Javascript。 - Barmar
尽管装饰这些特性似乎是多余的,但漂亮的东西被认为能更好地发挥作用。 - fbynite
1
@loganfsmyth 模态对话框的概念自用户界面的起源以来就存在了。除非滥用,否则它不会成为麻烦。我个人并没有看到任何问题,我只是想“知道”用户何时禁用了它... - Sebas
显示剩余5条评论
2个回答

8
当复选框被勾选时,对话框会立即“关闭”。您可以检查复选框是否异常快速关闭:
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
});

虽然仅使用CSS和HTML创建模态对话框可能更容易且在各种浏览器和平台上更加一致,但我个人不喜欢Chrome的方法。
演示: http://jsfiddle.net/tS9G6/4/ 我稍微查看了一下Chromium的源代码,该属性未存储在任何地方,因此似乎没有可以查看的特定于Chromium的属性。

但是有没有什么确定的方法呢? - Nisarg Shah
@NisargShah:不。 - Blender

3

你无法对此做任何事情。这是浏览器的功能。

您可以检查时机 -

如何检测“防止此页面创建其他对话框”

建议按照以下步骤进行操作:

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;
}

1
我不想做任何违反它的事情。 - Sebas
我根据别人的建议更新了我的回复 - 我认为这里很有道理。对于造成的困惑,我感到抱歉。 - Kelly J Andrews
谢谢您的输入。 - Sebas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接