投稿者 ebifurai55  (社会人) 投稿日時 2009/6/19 10:32:24
> Aかつ_blankじゃなかったら_blankを指定する”になっている様な気がしますが、
>その通りです。そしてその前に、画像判定のメソッドが置かれているため、これは
>「画像のリンクは、すべて別ウィンドウで開く」という動作を行う事になります。
pDispだとその様な指定ができるのですね。ちなみに私が使っているのはなのですが、
その辺確認いただけないでしょうか?
>>>・リンクをクリックしてそれがjpg,gif,png画像ファイルだったら別なウィンドウを発生させる 
こういうのもあるわけでして・・・
>>・リンクをクリックしたらwavを鳴らす

リンクを普通にクリックしたら音声が鳴ってそのページに遷移して
、かつそれが画像だったら別ウィンドウに・・・という意味合いだったのですが、
言葉足らずだったようですね。申し訳ありません。


通常のリンクのクリックは自分でコードを書いてないので、
魔界の仮面弁士さんの2009/06/09 13:25:15 の書込みのソースを追加すると
、Aタグ全て新しいウィンドウで開いてしまいます。

結局、編集を続けて
続けてみて以下の様なコードが自分の仕様になりました。
拝見していただけると幸いです。※文字数を超えてしまったので省略して書きます。
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As StringByVal lpKeyName As Any, ByVal lpDefault As StringByVal lpReturnedString As StringByVal nSize As LongByVal lpFileName As StringAs Long
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As StringByVal hModule As LongByVal dwFlags As LongAs Long
Private Const SND_ASYNC = &H1
<INI読み込み省略>
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
    If pDisp.Document Is Nothing Then
        Exit Sub
    End If
    
'    If Not IsPicture(URL, Flags, TargetFrameName, PostData, Headers) Then 
'        Exit Sub 
'    End If 
    
    Dim element As Object
        On Error Resume Next
        Set element = pDisp.Document.activeElement
            If Err Then
    Exit Sub
    End If

    On Error Resume Next
    If element.tagName = "A" And element.Target = "_blank" Then
        element.Target = "_blank"
    If Err Then
    Exit Sub
    End If
        WebBrowser1.PutProperty "targetAnchor", Array(element)
        Cancel = True
        Timer1.Interval = 55
        Timer1.Enabled = True
    End If
    WebBrowser1.PutProperty "targetAnchor", Array(element)
    Call PlaySound("clicklink.wav", 0, SND_ASYNC)
'            Cancel = False 
'        Timer1.Interval = 55 
'        Timer1.Enabled = True 
End Sub

Private Sub Timer1_Timer()
    Timer1.Enabled = False
    Dim v As Variant
    v = WebBrowser1.GetProperty("targetAnchor")
    WebBrowser1.PutProperty "target", Empty
    If IsArray(v) Then
        v(0).Click
        Erase v
    End If
End Sub

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
    Dim f As Form2
    Set f = New Form2
    f.WebBrowser1.RegisterAsBrowser = True
    Set ppDisp = f.WebBrowser1.Object
    f.Show
End Sub
<Form_Load省略>
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
    Select Case Button.KEY
        Case "B_Preview"
            On Error Resume Next
            Call PlaySound("moveback.wav", 0, SND_ASYNC)
            WebBrowser1.GoBack
            If Err Then
                Exit Sub
            End If
            
        Case "B_Forward"
            On Error Resume Next
            Call PlaySound("moveforward.wav", 0, SND_ASYNC)
            WebBrowser1.GoForward
            If Err Then
            Exit Sub
            End If
            
        Case "B_refresh"
            Call PlaySound("refresh.wav", 0, SND_ASYNC)
            WebBrowser1.Refresh
            
        Case "B_HOME"
            On Error Resume Next
            Call PlaySound("returnhome.wav", 0, SND_ASYNC)
            WebBrowser1.Navigate (FileLocation)
            If Err Then
            Exit Sub
            End If
    End Select
End Sub


これでもまだ音が鳴るときと鳴らないとき、進むボタンを押したときBeforeNavigate2の音声が
再生されてしまいます。またいくつかのページでスクリプトエラーになってしまう(youtube等)
問題がありますが、一先ず形にはなったので、今回はこれで〆ます。
まだVB初めて1,2ヶ月なので魔界の仮面弁士さんのおっしゃってる事が7割以上わかりません。
これから勉強する余裕があれば画像の新しいリンクの方も実装してみます。
頭の整理がついてからやりたいと思います。



ありがとうございました。