Visual Basic 在 iF​​rame 中获取被点击的元素

Visual Basic get clicked element in iFrame

我使用 VB.NET 框架制作了一个自定义浏览器来获取文档的元素。对于一个简单的总结,每次我单击一个元素时,documentClicked 都会显示一条消息,但是当我单击 iFrame 中的元素时,它不会给我任何数据。

我认为,由于 doc 是一个 HtmlDocument,而 iframe 将是一个 HtmlWindow 或类似的东西;这就是它不起作用的原因,但我不确定如何着手声明它。

基本上我只是希望能够单击任何页面上的任何元素,它会显示坐标和大小 - 除了 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

您的方向非常正确。现在,正如我在评论中所说,这仅在 Iframe 和父 window 位于同一文档域中时才有效,否则您将获得未经授权的访问异常。

我还假设您在此页面上只有 1 个 iframe,否则您将不得不遍历列表并确定正确的 iframe。

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());
    }

欢迎您简化变量声明。