Html iFrame中的visualbasic get clicked元素

Html iFrame中的visualbasic get clicked元素,html,vb.net,iframe,webbrowser-control,Html,Vb.net,Iframe,Webbrowser Control,我使用VB.NET框架制作了一个自定义浏览器,以获取文档的元素。对于一个简单的摘要,每次我单击一个元素documentClicked都会显示一条消息,但当我单击iFrame中的元素时,它不会给我任何数据 我想既然doc是一个HtmlDocument,iframe就是一个HtmlWindow或者类似的东西;这就是为什么它不起作用,但我不确定如何着手宣布这一点 基本上,我只想能够点击任何页面上的任何元素,它将显示坐标和大小-除了iFrame中的元素外,其他一切都可以 Dim WithEvents d

我使用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和父窗口都在同一个文档域中时,这才有效,否则您将获得未经授权的访问异常

我还假设您在这个页面上只有一个iframe,如果没有,您将不得不在列表中循环并确定正确的一个

VB

#


欢迎您简化变量声明

我不确定这是否是一个完整的答案,但根据我的经验,VB WebBrowser控件并不是一个成熟的浏览器-它只是一个VB控件,它利用驻留的IE浏览器引擎来显示简单的HTML页面。有些事情超出了它的能力范围(尝试使用contenteditable)。我没有尝试过iframe,但如果它不喜欢它,我也不会感到惊讶-它确实非常有限。我能够通过查找网页上的所有iframe,然后查找元素,自动获取iframe中的元素。本质上,我只需要一个iFrameClicked子类,它将生成iFrame(HTMLWIndow)而不是HTMLDocument。据我所知,好吧,听起来很有希望。。。如果您可以获得iframe元素,那么您可能只需要在iframe文档中正确地识别它们(这是一个与容器HTML文档完全不同的文档)。如果没有看到您的代码,我无法提出其他建议。首先,只有当iframe和父页面位于同一文档域中时,才可能这样做。如果不是这样,那么当您尝试为Iframe的文档执行事件时,您将获得未经授权的访问异常。这正是我实现所需的基础!非常感谢。
    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
       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());
    }