tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
WebBrowserで別ウィンドウで開くを指定のBrowser等で開く(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2013/01/25 09:53
名前: VBレスキュー(花ちゃん)

***********************************************************************************
* カテゴリー:[インターネット][その他コントロール][]                              *
* キーワード:新しいウィンドウ,WebBrowser,ターゲット,NewWindow,Internet Explorer  *
***********************************************************************************
タイトル : WebBrowserのNewWindowについて
記 事 No : 6752
投 稿 日 : 2007/12/31(Mon) 20:18
元質問者 : U5
-----------------------------------------------------------------------------------
僕が使っているVBは「VisualStudio2005 AcademicEdition」です。
聞きたい内容は、
WebBrowserコントロールのNewWindowイベントを使い、特定のブラウザを表示すると言うものです。
今の現状は
Private Sub WebBrowser1_NewWindow(ByVal sender As Object, _
   ByVal e As System.ComponentModel.CancelEventArgs) Handles WebBrowser1.NewWindow
 Dim fm As Windows.Forms.Form = New Form1
 fm.Show()
End Sub
です。
これだと、確かに、イベントは動いて、新しいフォームが出るんですが、問題が、新しく表示されるものが、
開くはずのHPではなく、最初設定したHPに飛んでしまいます。
さらに、その後、IEが動いてしまいます。(IEだと、開くはずのHPがちゃんと表示されます。)

※ 標準では、WebBrowserコントロール内でtarget=_brank"なリンクを押すと、別窓でIEが開いてしまう。

-----------------------------------------------------------------------------------
記 事 No:6753
投 稿 日:2008/01/01(Tue) 01:04
回 答 者:YAS  
タイトル:VB2005のWebBrowserコントロールにNewWindow2イベントを拡張する
-----------------------------------------------------------------------------------
VB2005のWebBrowserコントロールでU5さんがお望みの機能を実現することはちょっと面倒です。
WebBrowser.CreateSinkメソッドのヘルプを参考にして,NewWindow2イベントを実装する必要があります。
そのNewWindow2イベントの中で新しいIEが開くのを抑制することができます。
以下のコードは簡単なタブブラウザの例です。
フォームのコードにコピー&ペーストするだけで動作するはずです。参考にしてください。

※エラー処理などは適当なので,必ず内容を理解して,必要な変更をしてから利用してください。

Option Strict On

Imports System.Runtime.InteropServices
Imports System.Security.Permissions

Public Class Form1

    Dim TabControl1 As New TabControl
    Dim WebBrowser1 As ExWebBrowser
    Dim TabPage1 As TabPage

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'WebBrowser1
        Me.WebBrowser1 = New ExWebBrowser
        Me.WebBrowser1.Dock = DockStyle.Fill
        AddHandler WebBrowser1.NewWindow2, AddressOf WebBrowser_NewWindow2
        'TabPage1
        Me.TabPage1 = New TabPage
        Me.TabPage1.Controls.Add(WebBrowser1)
        'TabControl
        Me.TabControl1.Dock = DockStyle.Fill
        Me.TabControl1.TabPages.Add(TabPage1)
        'Form1
        Me.Text = "WebBrowserNewWindow2Event"
        Me.Controls.Add(Me.TabControl1)
        '
        Me.WebBrowser1.GoHome()
    End Sub

    Private Sub WebBrowser_NewWindow2(ByVal sender As Object, ByVal e As WebBrowserNewWindow2EventArgs)
        'WebBrowser1
        Me.WebBrowser1 = New ExWebBrowser
        Me.WebBrowser1.Dock = DockStyle.Fill
        AddHandler WebBrowser1.NewWindow2, AddressOf WebBrowser_NewWindow2
        'TabPage1
        Me.TabPage1 = New TabPage
        Me.TabPage1.Controls.Add(WebBrowser1)
        'TabControl
        Me.TabControl1.Controls.Add(TabPage1)
        Me.TabControl1.SelectedTab = TabPage1
        '新しいウィンドウが開くのを抑制
        e.ppDisp = Me.WebBrowser1.Application
        Me.WebBrowser1.RegisterAsBrowser = True
    End Sub

End Class

Class ExWebBrowser
    Inherits WebBrowser

    'NewWindow2イベントの拡張
    Private cookie As AxHost.ConnectionPointCookie
    Private helper As WebBrowser2EventHelper

    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
    <System.Runtime.InteropServices.DispIdAttribute(200)> _
    Public ReadOnly Property Application() As Object
        Get
            If IsNothing(Me.ActiveXInstance) Then
                Throw New AxHost.InvalidActiveXStateException("Application", AxHost.ActiveXInvokeKind.PropertyGet)
            End If
            Return DirectCast(Me.ActiveXInstance, IWebBrowser2).Application
        End Get
    End Property

    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
    <System.Runtime.InteropServices.DispIdAttribute(552)> _
    Public Property RegisterAsBrowser() As Boolean
        Get
            If IsNothing(Me.ActiveXInstance) Then
                Throw New AxHost.InvalidActiveXStateException("RegisterAsBrowser", AxHost.ActiveXInvokeKind.PropertyGet)
            End If
            Return DirectCast(Me.ActiveXInstance, IWebBrowser2).RegisterAsBrowser
        End Get
        Set(ByVal value As Boolean)
            If IsNothing(Me.ActiveXInstance) Then
                Throw New AxHost.InvalidActiveXStateException("RegisterAsBrowser", AxHost.ActiveXInvokeKind.PropertySet)
            End If
            DirectCast(Me.ActiveXInstance, IWebBrowser2).RegisterAsBrowser = value
        End Set
    End Property

    <PermissionSetAttribute(SecurityAction.LinkDemand, Name:="FullTrust")> _
    Protected Overrides Sub CreateSink()
        MyBase.CreateSink()
        helper = New WebBrowser2EventHelper(Me)
        cookie = New AxHost.ConnectionPointCookie(Me.ActiveXInstance, helper, GetType(DWebBrowserEvents2))
    End Sub

    <PermissionSetAttribute(SecurityAction.LinkDemand, Name:="FullTrust")> _
    Protected Overrides Sub DetachSink()
        If cookie IsNot Nothing Then
            cookie.Disconnect()
            cookie = Nothing
        End If
        MyBase.DetachSink()
    End Sub

    Public Event NewWindow2 As WebBrowserNewWindow2EventHandler

    Protected Overridable Sub OnNewWindow2(ByVal e As WebBrowserNewWindow2EventArgs)
        RaiseEvent NewWindow2(Me, e)
    End Sub

    Private Class WebBrowser2EventHelper
        Inherits StandardOleMarshalObject
        Implements DWebBrowserEvents2

        Private parent As ExWebBrowser

        Public Sub New(ByVal parent As ExWebBrowser)
            Me.parent = parent
        End Sub

        Public Sub NewWindow2(ByRef ppDisp As Object, ByRef cancel As Boolean) Implements DWebBrowserEvents2.NewWindow2
            Dim e As New WebBrowserNewWindow2EventArgs(ppDisp)
            Me.parent.OnNewWindow2(e)
            ppDisp = e.ppDisp
            cancel = e.Cancel
        End Sub

    End Class

End Class

Public Delegate Sub WebBrowserNewWindow2EventHandler(ByVal sender As Object, ByVal e As WebBrowserNewWindow2EventArgs)

Public Class WebBrowserNewWindow2EventArgs
    Inherits System.ComponentModel.CancelEventArgs

    Private ppDispValue As Object

    Public Sub New(ByVal ppDisp As Object)
        Me.ppDispValue = ppDisp
    End Sub

    Public Property ppDisp() As Object
        Get
            Return ppDispValue
        End Get
        Set(ByVal value As Object)
            ppDispValue = value
        End Set
    End Property

End Class

<ComImport(), Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface DWebBrowserEvents2

    <DispId(DISPID.NEWWINDOW2)> Sub NewWindow2( _
        <[In](), Out(), MarshalAs(UnmanagedType.IDispatch)> ByRef ppDisp As Object, _
        <[In](), Out()> ByRef cancel As Boolean)

End Interface

Public Enum DISPID
    NEWWINDOW2 = 251
End Enum

<ComImport(), Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface IWebBrowser2

    ReadOnly Property Application() As <MarshalAs(UnmanagedType.IDispatch)> Object
    Property RegisterAsBrowser() As <MarshalAs(UnmanagedType.VariantBool)> Boolean

End Interface

※ 尚、YAS さんのご自分のサイトの方に最新版を投稿されておられますので、そちらも参考にして下さい。
 http://homepage1.nifty.com/yasunari/VB/VB2005/WebBrowserNewWindow2Event.htm



 [スレッド一覧へ] [親スレッドへ]