19

是否可以创建一个自定义模式消息,在用户输入之前“阻止”脚本的执行?

例如,如果不使用本机窗口警报/提示功能,如何实现这一点?

setInterval(function(){ 
     alert('Click OK to Continue');  // timing stops until user hits ok
},4000);

我知道您可以让您的自定义对话框在用户输入时调用回调函数,但我有兴趣能够强制执行这种阻塞行为

4

3 回答 3

10

是否可以创建一个自定义模式消息,在用户输入之前“阻止”脚本的执行?

不。没有办法像原生弹出窗口那样有效地阻止执行或用户交互(因为使用自定义弹出窗口,用户在技术上总是能够使用开发人员工具摆脱它)。

但是,正如 pst 在对该问题的评论中所说,异步灯箱并不繁琐,并且在阻止用户交互方面几乎与弹出窗口一样有效,因此我建议找到一个提供您喜欢的灯箱并与之一起运行的库。

例如,如果不使用本机窗口警报/提示功能,如何实现这一点?

即使使用本机窗口警报/提示功能,您也无法使用该代码执行您所说的操作(请参阅此小提琴- 在关闭弹出窗口之前等待 4 秒)。您需要以下内容:

function timeoutFunction() {
    alert('Click OK to Continue');  // timing ACTUALLY stops until user hits ok
    setTimeout(timeoutFunction, 4000);
}
setTimeout(timeoutFunction,4000);

如果没有原生弹出窗口,这是您无法实现的(准确地说 - 参见上面的灯箱)。

甚至while(true)循环通常不会像弹出窗口那样阻塞 - Firefox 至少有一个“停止脚本”消息,在它运行时间过长后会弹出,我相当确定其他主要浏览器也会这样做。

于 2012-11-29T22:02:55.847 回答
-1

不,你不能(至少不能在浏览器中)。Javascript API 大多是异步的。alert/prompt是例外。但是,使用异步提示和回调并不难。

于 2012-11-29T21:47:09.253 回答
-2

有点旧,但如果它有帮助,我已经找到了我的解决方案:

var answer = confirm("are you sure?"); if(!answer)return;

于 2014-08-13T20:58:41.020 回答