代码之家  ›  专栏  ›  技术社区  ›  dev.e.loper

window.showModalDialog与window.open

  •  12
  • dev.e.loper  · 技术社区  · 16 年前

    当您想使用window.showModalDialog函数时,会出现什么情况?它与window.open函数和几个删除某些chrome的参数(导航、地址栏等)完全相同。

    您希望何时使用window.showModalDialog和window.open?

    6 回复  |  直到 12 年前
        1
  •  10
  •   Samuel    16 年前

    模式对话框是一旦由父级打开,在关闭对话框之前,不允许您将焦点集中在父级上的对话框。

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

    作为旁注,我相信只有Internet Explorer实现 window.showModalDialog 所以这限制了你对它的使用。

        2
  •  18
  •   TJ VanToll    13 年前

    这个问题从最初被问到现在已经有好几年了,从那时起事情发生了一些变化。 window.showModalDialog 现在正式 standardized as part of HTML5 并且支持IE、Firefox 3+、Chrome( albeit buggy 以及Safari 5.1+。

    不幸地 窗口.显示模式对话框 仍然受到许多问题的困扰。

    • 在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执行。
    • 不支持移动浏览器 窗口.显示模式对话框 .

    因此,使用它仍然不是一个好主意 窗口.显示模式对话框 . 如果需要将窗口打开为模式(即用户在处理对话框之前无法与页面的其余部分交互),我建议使用 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/ .

        3
  •  4
  •   antyrat Andy    13 年前

    showModalDialog() 目前正在作为 HTML5 .第三个参数(用于其他选项)不在HTML5版本中,并且(安全地)被Safari和Chrome忽略。

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

        4
  •  3
  •   Jonathan Lidbeck    16 年前

    请注意,Chrome2中存在一个错误,它会阻止ShowModalDialog()正确加载。弹出窗口出现,但内容从未加载。

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

        5
  •  0
  •   antyrat Andy    13 年前

    showModalDialog() 适用于Internet Explorer、Firefox(3及更高版本) 在Chrome中工作,但弹出窗口不是模型(可以转到父窗口)

        6
  •  0
  •   ronapelbaum    12 年前

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