VB6 获得WebBrowser加载网页中,点击的元素

咸清 2011-01-07 10:30:47
在.NET中能够很容易实现

private void Document_Click(Object sender, HtmlElementEventArgs e)
{
if (wB.Document != null)
{
HtmlElement elem = wB.Document.GetElementFromPoint(e.MousePosition);
textBox1.Text = elem.InnerHtml;
}
}

但是,进过一下午努力,在VB6.0中始终找不到办法~~

再把问题说一遍:
鼠标点击网页时,返回 鼠标点击的网页元素
...全文
734 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
老柴 2011-05-13
  • 打赏
  • 举报
回复
我要看看怎么获取frame里面的元素
咸清 2011-01-09
  • 打赏
  • 举报
回复
Document的ActiveElement方法WS的表述中:
当文档具有焦点,而文档中的元素没有获得焦点时,ActiveElement 将返回对应于 <BODY> 标记的元素。

如果文档没有焦点,ActiveElement 将返回 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。

如果具有输入焦点的当前元素是 HTML TABLE 标记中的一个单元格 (TD),ActiveElement 将返回包含 TABLE 元素的元素。
咸清 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xxyj64501 的回复:]
引用楼主 ybh37 的回复:
在.NET中能够很容易实现
C# code

private void Document_Click(Object sender, HtmlElementEventArgs e)
{
if (wB.Document != null)
{
HtmlElement elem = wB.Document.……

Document对象也有ElementF……
[/Quote]

直接用Document的ActiveElement方法得到当前活动元素不是很可靠,在获取表格元素时是没有问题的,其它的元素就不行了。我试过了~
Document对象也有ElementFromPoint,但是在VB里不能直接用。
咸清 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lyserver 的回复:]
VB6更简单

VB code

Dim WithEvents m_Doc As MSHTML.HTMLDocument

Private Sub Form_Load()
Me.WebBrowser1.Navigate2 "http://www.baidu.com"
End Sub

Private Function m_Doc_onclick() As Boolean……
[/Quote]
谢谢~
我晚上回去试试!
xxyj64501 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ybh37 的回复:]

Document的ActiveElement方法WS的表述中:
当文档具有焦点,而文档中的元素没有获得焦点时,ActiveElement 将返回对应于 <BODY> 标记的元素。

如果文档没有焦点,ActiveElement 将返回 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。

如果具有输入焦点的当前元素是 HTML……
[/Quote]
ActiveElement绝对不止对Table元素有效。你注意一下元素是不是在框架里,如果是在框架(Frame)里,如果是在框架里边那就不能直接用ActiveElement得到。
xxyj64501 2011-01-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 ybh37 的回复:]
在.NET中能够很容易实现
C# code

private void Document_Click(Object sender, HtmlElementEventArgs e)
{
if (wB.Document != null)
{
HtmlElement elem = wB.Document.……
[/Quote]
Document对象也有ElementFromPoint的。可以用getCursorPos获得鼠标位置。再用ScreentoClient将鼠标位置转换成Webbrowser内的位置,而且在这一步你要想办法得到Webbrowser的句柄,会有点麻烦。然后再用ElementFromPoint就能获得鼠标处的元素。
也可以直接用Document的ActiveElement方法得到当前活动元素。
但是还有一点,当元素在Frame/Iframe中时,你不能简单地用这个方式得到。要特殊处理。
kaifadi 2011-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lyserver 的回复:]

别忘了引用“Microsoft HTML Object Library”
[/Quote]
敢问一下m_Doc是个普通的按钮吗?谢了
lyserver 2011-01-07
  • 打赏
  • 举报
回复
别忘了引用“Microsoft HTML Object Library”
lyserver 2011-01-07
  • 打赏
  • 举报
回复
VB6更简单

Dim WithEvents m_Doc As MSHTML.HTMLDocument

Private Sub Form_Load()
Me.WebBrowser1.Navigate2 "http://www.baidu.com"
End Sub

Private Function m_Doc_onclick() As Boolean
Dim elem As IHTMLElement

Set elem = m_Doc.parentWindow.event.srcElement
Debug.Print "m_Doc_onclick", "当前触发事件的元素:", elem.tagName, elem.sourceIndex, elem.Id
m_Doc_onclick = True
End Function

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)
Set m_Doc = Me.WebBrowser1.Document
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧