【问题标题】:Is it possible to simulate a blocked dialog like 'window.confirm()'? [duplicate]是否可以模拟像'window.confirm()'这样的阻塞对话框? [重复]
【发布时间】:2011-07-24 09:19:13
【问题描述】:

我想用 DIV+JavaScript 模拟 块对话框,例如 window.alert()window.confirm()window.prompt()。使用回调函数似乎很容易。但是我想在显示确认对话框时阻止该过程。

也就是说,我要定义一个像这样的函数:

var Alert = function(){ balabala };

点击确定或取消后返回truefalse

编辑

现在我定义了一个名为 Confirm() 的函数,现在我必须像这样调用它

Confirm(*callback*);

在实现中我会显示一个对话框,如确认,当点击 OK 时,回调将被执行。我想知道是否可以重写它,以便我可以像这样称呼它

if(Confirm()) {
    callback(); 
} else {
    balabala;
}

【问题讨论】:

  • 如果您可以阻止整个过程,我会将其作为错误报告给浏览器创建者。您应该能够阻止 javascript 的唯一事情是该单个选项卡中的 javascript 执行。

标签: javascript html block simulation confirm


【解决方案1】:

您不能阻止用户使用他们的浏览器 IE 切换选项卡并在他们返回您的选项卡之前对其执行其他操作,就像 alert() 调用所做的那样。但是您可以阻止他们使用您页面上的任何内容,直到他们回答问题为止。你可以用一个绝对定位的 div 填充整个正文,该 div 的 z-index 比页面的其余部分大,并给你的弹出窗口一个比它高一个的 z-index 并居中。

当然,用户仍然可以使用 Chrome 开发者工具或 Firebug 之类的工具来删除您的阻塞 div,因此这不是一件安全的事情。

编辑我误读了您的问题。您不关心在视觉上阻塞页面,但希望使弹出窗口的返回值与脚本的其余部分同步,而不是与回调异步。我不知道该怎么做。

也许这对你有用:https://developer.mozilla.org/en/Code_snippets/Threads#Waiting_for_a_background_task_to_complete

【讨论】:

  • 是的。现在详细说明一下,我定义了一个名为 Confirm() 的函数,现在我必须像“Confirm(*callback)”一样调用它,并且在实现中我显示了一个对话框,如确认,当单击 OK 时,回调将被执行。我想知道是否可以重写它,以便我可以将它称为“if(Confirm()) callback(); else balabala”
【解决方案2】:

不幸的是,仅使用 JavaScript 无法模拟同步代码调用。您可以创建纯基于 DOM 的对话框,但为了在它们关闭时执行代码,您需要让它接受回调或返回 Promise。不幸的是,这并不是最干净的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多