WebBrowserでjavascriptのエラーを表示させないようにするには?


クリーム  2009-02-24 07:36:23  No: 141553

VB2008で、WebBrowserを使ったツールを作成しています。
WebBrowserで表示させるサイトにjavascriptのエラーがあった場合、
エラーのメッセージボックスを表示させたくないのですが、
どのようにすればよいでしょうか?
ちなみに、関係ないかもしれませんが、このツールを動かすPCはVistaです。
宜しくお願いします。


魔界の仮面弁士  2009-02-25 20:53:27  No: 141554

直接の回答ではありませんが、アンマネージの 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


魔界の仮面弁士  2009-02-25 21:09:37  No: 141555

マネージ版 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


subaru  2009-02-26 19:52:41  No: 141556

WebBrowser.ScriptErrorsSuppressedプロパティ
(IWebBrowser2のSilentプロパティに相当)
をTrueにするだけじゃだめですか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加