如何检测用户是否选中了该框,“阻止此页面创建其他对话框”?
如果用户阻止了确认框的出现,则函数confirm('foobar')
将始终返回false。
如果用户看不到我的确认对话框confirm('Are you sure?')
,则用户永远无法执行操作。
所以,我使用像if(confirm('are you sure?')){ //stuff... }
这样的代码。因此,来自浏览器的false
自动回复将阻止用户执行stuff
。但是,如果有一种方法可以检测到用户已经选中了该框,那么我可以自动执行该操作。
我认为如果用户禁用了对话,那么该函数应该抛出错误,或者返回true。该功能用于确认用户请求的操作。
答案 0 :(得分:14)
据我所知,这是不可能以任何干净的方式进行,因为它是一个浏览器功能,如果浏览器不让你知道,那么你无法知道。
但是,你可以做的是在confirm()周围写一个响应时间的包装器。如果它太快而不能成为人类,则提示很可能被抑制,它将返回true而不是false。只要返回false,就可以通过运行confirm()几次来使其更加健壮,因此它成为超快用户的可能性非常低。
包装器将是这样的:
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建议使用库来做确认对话可能是最好的方法。
答案 1 :(得分:3)
我认为你无法改变它 - 它是浏览器功能。
如果您需要解决方法,我的第一个想法是将代码从使用系统confirm
更改为某些js库警报(来自例如jQuery UI)