如何检测用户是否已选中“阻止此页面创建其他对话框”复选框?
为什么这是一个问题
如果用户阻止了确认框的出现,则函数confirm('foobar')始终返回false。
如果用户看不到我的确认对话框confirm('Are you sure?'),则用户将永远无法执行该操作。
语境
因此,我使用if(confirm('are you sure?')){ //stuff... }之类的代码。因此,浏览器对false的自动响应将阻止用户执行stuff。但是,如果有一种方法可以检测到用户已选中该框,那么我可以自动执行该操作。
我认为,如果用户禁用了对话框,则该函数应该抛出错误或返回true。该功能旨在确认用户已请求的操作。

最佳答案

据我所知,这不可能以任何干净的方式完成,因为它是浏览器功能,如果浏览器没有让您知道,则您将不知道。

但是,您可以做的是在Confirm()周围编写一个包装器,以乘以响应时间。如果太快而无法成为人类,则提示很可能被抑制了,它将返回true而不是false。您可以通过多次运行Confirm()来使其更加健壮,只要它返回false即可,因此它成为 super 快速用户的可能性非常低。

包装器将是这样的:

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

PS:如果您想要一个实用的解决方案而不是这种技巧,Jerzy Zawadzki的建议是使用库进行确认对话框,这可能是最好的方法。

关于javascript - 如何检测 “prevent this page from creating additional dialogs”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11571015/

10-12 07:08