window.showModalDialog与window.open

时间:2009-04-08 01:33:27

标签: javascript

当你想使用window.showModalDialog函数时有什么情况?你可以使用window.open函数和几个删除一些chrome(导航,地址栏等等)的参数完全相同的接缝

您想何时使用window.showModalDialog和window.open?

6 个答案:

答案 0 :(得分:18)

这个问题最初被问到已经过去几年了,事情发生了一些变化。 window.showModalDialog现已正式standardized as part of HTML5,并且在IE,Firefox 3 +,Chrome(albeit buggy)和Safari 5.1+中受支持。

不幸的是window.showModalDialog仍然受到许多问题的困扰。

  • 默认情况下,模式对话框在Firefox,Chrome和Safari中被阻止为弹出窗口。
  • Chrome中的模态对话框是错误的,并非真正的模态 - 请参阅http://code.google.com/p/chromium/issues/detail?id=16045& http://code.google.com/p/chromium/issues/detail?id=42939
  • 当模态对话框启动时,除Chrome以外的所有浏览器都会阻止用户与整个窗口(收藏夹,浏览器控件,其他标签等等)进行交互。
  • 他们很难调试,因为他们在等待模式对话框完成时暂停父窗口中的JavaScript执行。
  • 没有移动浏览器支持window.showModalDialog

因此,使用window.showModalDialog仍然不是一个好主意。如果您需要打开的窗口是模态的(即用户在处理对话框之前无法与页面的其余部分进行交互),我建议使用jQuery UI's dialog plugin

window.open适用于非模态窗口,但我会坚持使用jQuery UI的对话框,因为打开新窗口会使用户烦恼。

如果您有兴趣,我会在我的博客上更详细地写下这些内容 - http://tjvantoll.com/2012/05/02/showmodaldialog-what-it-is-and-why-you-should-never-use-it/

答案 1 :(得分:10)

模态对话框是父级打开的对话框,在关闭对话框之前不允许您专注于父级。

可以使用模式对话框来登录表单,编辑表单等,您希望弹出一个用户交互的弹出窗口,但不允许用户返回打开弹出窗口的窗口。

作为旁注,我认为只有Internet Explorer实现window.showModalDialog,因此限制了它的使用。

答案 2 :(得分:4)

showModalDialog()目前正在标准化为 HTML5 的一部分。第三个参数(对于其他选项)在HTML5版本中不存在,并且(安全地)被Safari和Chrome忽略。

http://dev.w3.org/html5/spec//user-prompts.html#dialogs-implemented-using-separate-documents

答案 3 :(得分:3)

请注意,Chrome 2中存在一个错误,导致showModalDialog()无法正常加载。出现弹出窗口,但内容从不加载。

避免使用showModalDialog()的另一个原因。

答案 4 :(得分:0)

showModalDialog()适用于Internet Explorer,Firefox(3及以上版本) 适用于Chrome但弹出窗口不是模型(您可以转到父窗口)

答案 5 :(得分:0)

请注意,虽然您可以从任何弹出窗口显示模态,但您无法在某些浏览器(IE,Safari)中使用模型对话框中的window.open。