我正在尝试从 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 表达式就会超出范围?)同时使用 AddressOf
和 Handles
,但这没有帮助。
我需要做什么才能触发 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 - 请参阅 here 和 here - 由于我没有在窗口上下文中使用 WebBrowser,所以我认为这是不可能的就我而言。)
最佳答案
您应该使用开箱即用的标准 WebBrowser Control随 WPF 一起提供(还有另一种用于 Winforms 应用程序)。它直接支持所有基本事件。
如果您错过了一些 Winforms 功能,例如 IsWebBrowserContextMenuEnabled
或 ScriptErrorsSuppressed
,我建议您引用我在这个问题中的回答: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/