题
如何检测用户是否已选中“阻止此页面创建其他对话框”复选框?
为什么这是一个问题
如果用户阻止了确认框的出现,则函数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/