我正在尝试覆盖Javascript中的标准confirm()
方法(制作一个不错的用户界面和内容)。我已经阅读了100篇“无法完成”的帖子,但我不想放弃,直到我给它一个公平的镜头。 :)
因此,真正的问题当然是confirm()
方法必须阻止所有javascript执行,直到用户选择一个选项。那么,Javascript中有哪些阻塞行为的方法呢?我已经能够拿出5:
alert()
- 不适合我,因为它会显示自己不需要的用户界面; confirm()
- 与alert()
; XmlHttpRequest
- 排序,但涉及服务器...... showModalDialog()
- 很好,但我需要一个特定的设计,还有一些浏览器兼容性要求...... 我到目前为止最好的方法是使用提示创建<iframe>
(然后获取自己的javascript执行线程)并使用XmlHttpRequest
阻止,直到用户在{中选择了一个选项{1}}。不幸的是,这涉及在服务器之间反复传递结果,我想让这个100%客户端。此外,它在打开对话框时占用服务器线程,并且可能存在一些适用于浏览器的特定ajax超时。
有人能想到阻止执行的任何其他Javascript方法,这些方法可能(ab)用于达到预期的效果吗?
答案 0 :(得分:4)
不,无法完成这是有充分理由的。页面中任意的,自定义样式的用户交互始终是异步的(基于事件的),因此不适用于任何类型的阻塞行为(只会发生阻止无限循环的事件)无限循环结束后。)
您提到的所有阻止方法都在与页面不同的环境中进行用户交互 - 浏览器控制的alert
/ confirm
/ prompt
弹出窗口,加载了不同的页面通过showModalDialog
- 当第一个被冻结时,该环境需要能够获得焦点。
创建像这样可靠的设置是很困难的。但是,您可以尝试几乎每个 javascript功能(不涉及异步回调),因为默认情况下所有JS操作都是同步的。如果您想进一步实验,我建议您查看那些处理不同DOM环境(window.open
,document.write
,iframe.contentWindow
跨框架访问)的方法,看看是否可以得到这些中的任何一个来产生第二个环境并行运行。