gpt4 book ai didi

javascript - 如何检测 "prevent this page from creating additional dialogs"

转载 作者:行者123 更新时间:2023-12-03 13:32:34 24 4
gpt4 key购买 nike

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

最佳答案

据我所知,这是不可能以任何干净的方式做到的,因为它是一个浏览器功能,如果浏览器没有让你知道,那么你就无法知道。

但是,您可以做的是在 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:如果你想要一个实用的解决方案而不是这个 hack,Jerzy Zawadzki 关于使用库进行确认对话框的建议可能是最好的方法。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com