Javascript中阻塞了哪些方法?

时间:2013-06-05 08:08:32

标签: javascript blocking synchronous

我正在尝试覆盖Javascript中的标准confirm()方法(制作一个不错的用户界面和内容)。我已经阅读了100篇“无法完成”的帖子,但我不想放弃,直到我给它一个公平的镜头。 :)

因此,真正的问题当然是confirm()方法必须阻止所有javascript执行,直到用户选择一个选项。那么,Javascript中有哪些阻塞行为的方法呢?我已经能够拿出5:

  • alert() - 不适合我,因为它会显示自己不需要的用户界面;
  • confirm() - 与alert();
  • 相同的问题
  • 无限循环 - 即使是现代浏览器也会疯狂地吃掉CPU并显示“停止javascript”?几秒后提示;
  • 同步模式下的
  • XmlHttpRequest - 排序,但涉及服务器......
  • showModalDialog() - 很好,但我需要一个特定的设计,还有一些浏览器兼容性要求......

我到目前为止最好的方法是使用提示创建<iframe>(然后获取自己的javascript执行线程)并使用XmlHttpRequest阻止,直到用户在{中选择了一个选项{1}}。不幸的是,这涉及在服务器之间反复传递结果,我想让这个100%客户端。此外,它在打开对话框时占用服务器线程,并且可能存在一些适用于浏览器的特定ajax超时。

有人能想到阻止执行的任何其他Javascript方法,这些方法可能(ab)用于达到预期的效果吗?

1 个答案:

答案 0 :(得分:4)

不,无法完成这是有充分理由的。页面中任意的,自定义样式的用户交互始终是异步的(基于事件的),因此不适用于任何类型的阻塞行为(只会发生阻止无限循环的事件)无限循环结束后。)

您提到的所有阻止方法都在与页面不同的环境中进行用户交互 - 浏览器控制的alert / confirm / prompt弹出窗口,加载了不同的页面通过showModalDialog - 当第一个被冻结时,该环境需要能够获得焦点。

创建像这样可靠的设置是很困难的。但是,您可以尝试几乎每个 javascript功能(不涉及异步回调),因为默认情况下所有JS操作都是同步的。如果您想进一步实验,我建议您查看那些处理不同DOM环境(window.opendocument.writeiframe.contentWindow跨框架访问)的方法,看看是否可以得到这些中的任何一个来产生第二个环境并行运行