【问题标题】:Detect java applet modal dialog in webbrowser control在 webbrowser 控件中检测 java applet 模态对话框
【发布时间】:2011-06-27 11:36:49
【问题描述】:

我们在嵌入在 winform 中的 .Net webbrowser 控件中托管 web 应用程序。

当 Web 应用程序中的 Java 小程序显示模式对话框时,只有 Web 应用程序中的小程序区域被停用。 (要求是 Firefox 风格的模式)。

有没有办法检测 webbrowser 控件中的小程序显示模式对话框? (或者,在打开 java 小程序对话框时获取窗口句柄?)

【问题讨论】:

    标签: java .net applet webbrowser-control


    【解决方案1】:

    使用一些 JavaScript 直接调用 Java 方法 Window.getWindows() 以获取现有 Window 对象的数组。 (J)Frame 对象和(J)Dialog 对象都扩展了Window

    注意,AFAIR,每个小程序都有一个Frame 来包含它。因为屏幕上的“窗口”不仅仅是对话框,您需要检查类型。

    从 JS 以适当的时间间隔重复执行此操作,应该可以检测到 Java 小程序生成的任何对话框。

    或者,扩展小程序并添加一些额外的方法来进行上述相同的检查可能会更容易,然后调用 JavaScript 来通知有打开的对话框。

    【讨论】:

    • 不幸的是,我无法控制在 webbrowser 中运行的小程序 - 它们是由其他部门和公司生产的(否则,我会让小程序调用 winform 以显示“真正的”模式对话框,但是那不是孩子们想要的;-))。我真的不想重复检查。我希望有一个可以订阅的信号..
    • “我希望得到一个我可以订阅的信号..”我希望世界和平,结束瘟疫、干旱和饥荒。
    • 很好 - 我可以否决评论吗? ;-) Firefox 似乎通过消息泵检测到模态对话框。我会试试的。
    • “firefox 好像通过消息泵检测到模态对话框。我会试试的。” .Net 'webbrowser' 组件是 FF ?!?让我目瞪口呆。我觉得肯定是 IE。
    • 不是 .net 网络浏览器,而是在 firefox 中运行的小程序。
    【解决方案2】:

    使用 sun.plugin2.main.client.ModalityHelper.installModalityListener()。这将发出modalityPopped 和modalityPushed 信号。

    http://www.javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/plugin2/main/client/ModalityHelper.html#installModalityListener%28sun.plugin2.main.client.ModalityInterface%29

    需要 Java 6,并且可能仅适用于某些特定平台(范围未知)。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 2011-10-01
      • 2010-09-09
      • 2012-09-03
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2023-03-06
      相关资源
      最近更新 更多