wpf - Internet Explorer 实例 DocumentComplete 未触发

标签 wpf vb.net ie-automation

我正在尝试从 WPF 应用程序创建 Internet Explorer 实例,加载保存的本地文件,并在加载文件后进行一些进一步的处理。但是,尽管该文件在 Internet Explorer 窗口中可见,但 DocumentComplete 事件永远不会触发:

'static field
Dim iex As ShDocVw.InternetExplorer

Public Sub DoStuff()
    Dim path = "c:\test.htm"
    iex = New SHDocVw.InternetExplorer
    iex.Visible = True
    AddHandler iex.DocumentComplete, Sub(o As Object, ByRef url As Object)
            'This code is never executed
            Dim i = 5
        End Sub
    iex.Navigate2(path)
End Sub

当我导航到非本地 URL(例如 http://www.google.com )时,DocumentComplete 事件会触发。

NavigateComplete2 事件也存在相同的行为。

我尝试使用类成员方法而不是 lambda 表达式(也许一旦方法退出,lambda 表达式就会超出范围?)同时使用 AddressOfHandles ,但这没有帮助。

我需要做什么才能触发 DocumentComplete 事件?

(注意:该页面没有框架。)

更新

此代码正在类库中使用,因此我无法使用 WebBrowser 控件,因为它无法在代码中实例化。

正如 SimonMourier 在评论中指出的那样,WebBrowser 可以在代码中实例化:

Dim wb = New WebBrowser
AddHandler wb.LoadCompleted, Sub(s, e)
    Dim i = 5
End Sub
wb.Navigate(path)

虽然 LoadCompleted 事件仍然没有触发,但 Navigated 事件却触发了,而且它似乎足以满足我的目的。 (显然,WebBrowser 必须可见才能触发 LoadCompleted - 请参阅 herehere - 由于我没有在窗口上下文中使用 WebBrowser,所以我认为这是不可能的就我而言。)

最佳答案

您应该使用开箱即用的标准 WebBrowser Control随 WPF 一起提供(还有另一种用于 Winforms 应用程序)。它直接支持所有基本事件。

如果您错过了一些 Winforms 功能,例如 IsWebBrowserContextMenuEnabledScriptErrorsSuppressed,我建议您引用我在这个问题中的回答:How to deactivate "right click" on WPF Webbrowser Control?

只有在这些特殊情况下,或者需要掌握 native 底层 IE 的文档对象模型 (DOM)、IHTMLDocument2 等接口(interface)时,才需要互操作。

关于wpf - Internet Explorer 实例 DocumentComplete 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725913/

相关文章:

c# - 将文本框绑定(bind)到属性

c# - 在应用程序的开头加载所有项目,还是在每个用户操作时加载所需的项目?

vb.net - google map 未显示在 vb.net 应用程序中

c# - 通过单击行标题显示 DataGrid 行详细信息?

wpf - 在大型项目和 MVVM 中使用 Microsoft(或其他)功能区

c# - 代码转换

.net - 暂停 System.Timers.Timer 的正确方法?

html - 填充 html 自动搜索框并获取结果

vba - 使用 VBA 选择网站上的下拉值