繁体   English   中英

如何知道模式框(警报,提示,确认...)是否已在javascript中被禁用?

[英]how to know whether modal boxes (alert, prompt, confirm…) have been disabled in javascript?

我有一个基于私人网络的应用程序,有时我真的向用户询问他们在特定情况下想做什么。 为此,我正在使用javascript的confirm功能。

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

在此输入图像描述

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

我可以检测他们检查那个小盒子的时间吗?

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

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的属性可供您查看。

你无能为力。 这是一个浏览器功能。

你可以检查时间 -

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

这表明做了以下事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM