2016-12-07 12 views
0

画像に関連付けられたリンクを取得する必要があります。 以下のコードでわかるように、私はTWebBrowserコンポーネントをカスタマイズしています。 WebBrowserビューでマウスのクリックを傍受します。TWebBrowser:リンクで画像をクリックすると、リンクhrefが表示されます

一般的なリンクでは現在のコードは正常に動作しますが、イメージの場合はイメージをクリックするとhrefリンクを取得できません。私は画像をクリックすると

、私は行くことができるリンクのhref =「https://vimeo.com/194387045」

他の方法を取得する必要がありますか?

<p>&nbsp;</p> 
<p><a href="https://vimeo.com/194387045" target="_blank"> 
<img src="http://172.16.0.16/static/comunica/436dde8236d078cff2dc76deaa113dbb" 
alt="" /></a></p> 

方法:

Procedure TJBWebBrowser.ValidateLinkClick; 
Var 
    LElement: IHTMLElement; 
    LLink, LTag: String; 
    LCancel: Boolean; 
    LDocument: IHTMLDocument2; 
Begin 

    LDocument := IHTMLDocument2(Document); 

    If Not Assigned(LDocument) Then 
    Exit; 

    LCancel := False; 
    LElement := LDocument.parentWindow.event.srcElement; 
    LTag := Trim(LowerCase(LElemento.tagName)); 

    If LTag = 'a' Then 
    LLink := Trim(LElement.getAttribute('href', 0)); 

    If Assigned(FOnURLClick) Then 
    FOnURLClick(Self, LLink, LCancel); 

    If (LLink <> EmptyStr) And (Not LCancel) Then 
    ShellExecute(0, Nil, PChar(LLink), Nil, Nil, SW_SHOWNORMAL); 
End; 
+2

@Delphiman、No。OnBeforeNavigate2は、リンクをクリックしてURLにナビゲートするたびに起動されます。参照:http://stackoverflow.com/a/25311587/937125 – kobik

答えて

0

私は私の疑問のための解決策を見つけました。

皆様のご協力ありがとうございます。

が変更されたコードフォロー:だから

Procedure TJBWebBrowser.ValidateLinkClick; 
Var 
    LElement: IHTMLElement; 
    LLink, LTag: String; 
    LCancel: Boolean; 
    LDocument: IHTMLDocument2; 
Begin 

    LCancel := False; 
    LDocument := IHTMLDocument2(Document); 

    If Not Assigned(LDocument) Then 
    Exit; 

    //Old line 
    //LElement := LDocument.parentWindow.event.srcElement; 

    //New line 
    LElement := LDocument.activeElement; 
    if not Assigned(LElement) then 
    Exit; 

    LTag := Trim(LowerCase(LElement.tagName)); 

    If LTag = 'a' Then 
    LLink := Trim(LElement.getAttribute('href', 0)); 

    If Assigned(FOnURLClick) Then 
    FOnURLClick(Self, LLink, LCancel); 

    If (LLink <> EmptyStr) And (Not LCancel) Then 
    ShellExecute(0, Nil, PChar(LLink), Nil, Nil, SW_SHOWNORMAL); 
End; 
関連する問題