hrd*_*rbl 18 javascript firefox google-chrome
如何检测用户是否已选中该框,"阻止此页面创建其他对话框"?
如果用户阻止了确认框的出现,则该函数confirm('foobar')
始终返回false.
如果用户无法看到我的确认对话框confirm('Are you sure?')
,则用户永远不能执行该操作.
所以,我使用的代码就像if(confirm('are you sure?')){ //stuff... }
.因此,false
来自浏览器的自动响应将阻止用户进行操作stuff
.但是,如果有一种方法可以检测到用户已经选中了该框,那么我可以自动执行该操作.
我认为如果用户已禁用对话,则该函数应该抛出错误,或返回true.该功能用于确认用户请求的操作.
ent*_*opy 15
据我所知,这是不可能以任何干净的方式做,因为它是一个浏览器功能,如果浏览器不让你知道,那么你无法知道.
但是,你可以做的是在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;
}
Run Code Online (Sandbox Code Playgroud)
PS:如果你想要一个实用的解决方案而不是这个黑客,Jerzy Zawadzki建议使用库来做确认对话可能是最好的方法.
归档时间: |
|
查看次数: |
3398 次 |
最近记录: |