2017-02-07 3 views
0

Ich habe einen benutzerdefinierten Browser mit dem VB.NET-Framework, um die Elemente eines Dokuments zu erhalten. Für eine einfache Zusammenfassung jedes Mal, wenn ich auf ein Element klicke, wird documentClicked eine Nachricht anzeigen, aber wenn ich auf Elemente in einem iFrame klicke, erhält ich keine Daten.Visual Basic get geklickt Element in iFrame

Ich dachte, dass da doc ein HtmlDocument ist und ein iframe ein HtmlWindow oder etwas in diesen Zeilen wäre; deshalb funktioniert es nicht, aber ich bin mir nicht sicher, wie ich das erklären soll.

Im Grunde möchte ich nur in der Lage sein, auf ein beliebiges Element auf einer beliebigen Seite klicken und es zeigt die Koordinaten und Größe - funktioniert gut mit allem außer Elementen in einem iFrame.

Dim WithEvents doc As HtmlDocument 

    Private Sub WinBrowse_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles webBrowser.DocumentCompleted 
      doc = CType(sender, WebBrowser).Document 
    End Sub 

    Private Sub doc_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles doc.Click 
      documentClicked(webBrowser, e) 
    End Sub 
+0

Ich bin mir nicht sicher, dass dies eine vollständige Antwort ist, aber nach meiner Erfahrung ist das VB WebBrowser-Steuerelement kein ausgewachsener Browser - es ist nur ein VB-Steuerelement, das die residente IE-Browser-Engine verwendet, um einfach anzuzeigen HTML-Seiten. Einige Dinge sind über seine Fähigkeiten hinaus (versuchen Sie, contenteditable damit zu verwenden). Ich habe nicht iframe versucht, aber es würde mich nicht überraschen, wenn es nicht mochte - es ist wirklich sehr begrenzt. –

+0

Ich kann Elemente im iFrame automatisch erhalten, indem ich alle iFrames auf der Webseite finde und dann das Element finde. Im Wesentlichen muss ich nur einen iFrameClicked-Unterserver haben, der den iFrame (HTMLWIndow) anstelle des HTMLDocuments generiert. Zu meinem Verständnis. – Torewin

+0

OK - das hört sich vielversprechend an ... Wenn Sie Iframe-Elemente erhalten können, müssen Sie sie wahrscheinlich nur im Iframe-Dokument (das ein separates Dokument aus dem Container-HTML-Dokument ist) richtig identifizieren. Ohne Ihren Code zu sehen, kann ich nicht viel mehr vorschlagen. –

Antwort

0

Sie waren sehr auf dem richtigen Weg. Nun, wie ich in meinem Kommentar gesagt habe, funktioniert das nur, wenn sowohl Iframe als auch das Elternfenster sich in derselben Dokumentdomäne befinden. Andernfalls erhalten Sie eine Ausnahme für den nicht autorisierten Zugriff.

Ich gehe auch davon aus, dass Sie nur 1 iframe auf dieser Seite haben, wenn nicht, müssen Sie die Liste durchlaufen und die richtige identifizieren.

VB

Public Class Form2 
     Dim WithEvents IframeDoc As HtmlDocument 
     Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted 
      If (WebBrowser1.ReadyState = WebBrowserReadyState.Complete) Then 
       Dim doc = WebBrowser1.Document 
       Dim window = doc.Window 
       Dim IframeWindow = window.Frames(0) 
       IframeDoc = IframeWindow.Document 
      End If 
     End Sub 
     Private Sub Document_Click(sender As Object, e As HtmlElementEventArgs) Handles IframeDoc.Click 
      MessageBox.Show(e.ToElement.ToString()) 
     End Sub 
    End Class 

C#

 private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
     { 
      var doc= webBrowser1.Document; 
      var window = webBrowser1.Document.Window; 
      var iframewindow = window.Frames[0]; //I am assuming its the first one 
      MessageBox.Show(iframewindow.Document.Domain); 

     } 
    } 

    private void Document_Click(object sender, HtmlElementEventArgs e) 
    { 
     MessageBox.Show(e.ToElement.ToString()); 
    } 

Gerne können Sie die Variablendeklarationen vereinfachen.

+0

Das war nur die Erdung, die ich brauchte, um das zu erreichen, was ich brauchte! Vielen Dank! – Torewin