VB2008で、WebBrowserを使ったツールを作成しています。
WebBrowserで表示させるサイトにjavascriptのエラーがあった場合、
エラーのメッセージボックスを表示させたくないのですが、
どのようにすればよいでしょうか?
ちなみに、関係ないかもしれませんが、このツールを動かすPCはVistaです。
宜しくお願いします。
直接の回答ではありませんが、アンマネージの WebBrowser の場合には、
window オブジェクトの onerror イベントをハンドルすることで取得できました。
(マネージ WebBrowser で試した事はありません)
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200402/04020001.txt
あるいは、このあたりかな?
http://support.microsoft.com/kb/261003/en-us
http://support.microsoft.com/kb/317024/en-us
マネージ版 WebBrowser の場合、当方では下記で取得できました。
Public Class Form1
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim sUrl As String = "http://〜〜〜" 'エラーの出るサイト
Me.WebBrowser1.Navigate(sUrl)
End Sub
Private rawWin As Object = Nothing
Private WithEvents handler As New WBErrorHandler()
Private Sub ReleaseWin()
If rawWin IsNot Nothing Then
CallByName(rawWin, "onerror", vbLet, DBNull.Value)
System.Runtime.InteropServices.Marshal.ReleaseComObject(rawWin)
rawWin = Nothing
End If
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
ReleaseWin()
rawWin = DirectCast(sender, WebBrowser).Document.Window.DomWindow
CallByName(rawWin, "onerror", vbLet, handler)
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
ReleaseWin()
handler = Nothing
End Sub
Private Sub handler_OnError(ByVal sender As Object, ByVal e As WBErrorHandler.WBErrorEventArgs) Handles handler.OnError
Label1.Text = e.Description
Label2.Text = e.Url
Label3.Text = CStr(e.Line)
'標準のエラー通知を呼び出すか否か
e.Cancel = False
End Sub
End Class
<System.Runtime.InteropServices.ComVisible(True)> _
Public Class WBErrorHandler
Public Event OnError(ByVal sender As Object, ByVal e As WBErrorEventArgs)
<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.DispId(0)> _
Public Function DefaultMethod(ByVal description As Object, ByVal url As Object, ByVal line As Object) As Object
Dim e As New WBErrorEventArgs(description, url, line)
RaiseEvent OnError(Me, e)
Return e.Cancel
End Function
Public Class WBErrorEventArgs
Inherits EventArgs
Public Sub New(ByVal description As Object, ByVal url As Object, ByVal line As Object)
_description = description
_url = url
_line = line
_cancel = False
End Sub
Private _description As String
Public ReadOnly Property Description() As String
Get
Return _description
End Get
End Property
Private _url As String
Public ReadOnly Property Url() As String
Get
Return _url
End Get
End Property
Private _line As Integer
Public ReadOnly Property Line() As Integer
Get
Return _line
End Get
End Property
Private _cancel As Boolean
Public Property Cancel() As Boolean
Get
Return _cancel
End Get
Set(ByVal value As Boolean)
_cancel = value
End Set
End Property
End Class
End Class
WebBrowser.ScriptErrorsSuppressedプロパティ
(IWebBrowser2のSilentプロパティに相当)
をTrueにするだけじゃだめですか?
ツイート | ![]() |