我创建了一个包含webbrowser控件的Windows窗体应用程序。在使用下面的代码时,我遇到了显示脚本错误的问题。
我想捕获脚本错误,禁止它们并将它们记录到文件中。下面是msdn文档告诉我使用的完整代码。
' Hides script errors without hiding other dialog boxes.
Private Sub SuppressScriptErrorsOnly(ByVal browser As WebBrowser)
' Ensure that ScriptErrorsSuppressed is set to false.
browser.ScriptErrorsSuppressed = False
' Handle DocumentCompleted to gain access to the Document object.
AddHandler browser.DocumentCompleted, _
AddressOf browser_DocumentCompleted
End Sub
Private Sub browser_DocumentCompleted(ByVal sender As Object, _
ByVal e As WebBrowserDocumentCompletedEventArgs)
AddHandler CType(sender, WebBrowser).Document.Window.Error, _
AddressOf Window_Error
End Sub
Private Sub Window_Error(ByVal sender As Object, _
ByVal e As HtmlElementErrorEventArgs)
' Ignore the error and suppress the error dialog box.
e.Handled = True
End Sub
我等到documentCompleted事件附加window.error处理程序。然而,这并不像预期的那样工作,就像处理程序永远不会被注册一样。 (在整个流程中进行和控制台记录时,事实证明它会在文档完成之前抛出脚本错误,这在导航事件期间发生。)
在脚本错误窗口中单击“确定”后,它将触发documentCompleted事件。有没有人有什么建议?我试图在导航,导航,文档已完成事件中附加处理程序。此外,这里棘手的部分是文档必须完全加载才能在任何时候添加处理程序之前,它不起作用。 我在Windows 7 Professional上使用 4.0 , VS2012 。
我在VB.NET和C#中都尝试过这两种方法,两者都有同样的问题。
您可以在http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.scripterrorssuppressed.aspx
访问此网站答案 0 :(得分:3)
您在文档完成加载后声明处理程序,因此事件永远不会被触发。您必须在文档完成渲染之前声明处理程序。
声明:
AddHandler CType(sender, WebBrowser).Document.Window.Error, _
AddressOf Window_Error
在应用程序启动时或在任何地方,但在导航完成范围之前和之外。