凤阳王良才酸菜鱼电话:在WebBrowser里如何响应HTML事件
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 13:36:34
悬赏100分:在WebBrowser里如何响应HTML事件?(99分后加) [问题点数:100分,结帖人:kitegirl
(小仙妹) 楼主发表于:2002-03-18 09:40:26 由于这个问题不一定有人回答出来,所以暂时是1分。如果有圆满答案肯定加分。最近以VB制作程序,以WebBrowser做输出显示还可以(比如输出个报表),但是不能捕捉事件。比如我以WebBrowser打开一个web页,当我用鼠标指向一个IMG时候在网页里会产生一个onmouseover事件,但是这个事件如何让VB程序获得?不知道有什么办法能捕捉HTML元素的事件?
只要能实现如下目的,就算解决了!
1、在WebBrowser里打开一个有两个IMG的网页。
2、当鼠标移动到第一个IMG上的时候,VB程序的Text1显示“A”
3、当鼠标移动到第二个IMG上的时候,VB程序的Text1显示“B”
4、当鼠标点击第一个IMG上的时候,VB程序的Text2的数值加一
5、当鼠标点击第二个IMG上的时候,VB程序的Text2的数值减一
如果真的可以捕捉HTML事件,那将可以制作出极其美观的程序。同时可以省掉很多控件。
另外,是否可以把HTML元素直接放到Form窗体上呢?如果有办法也请给出一个例子。(想吃老虎的小猪) #1楼 得分:50回复于:2002-03-18 10:05:25 以前做过几个小例子放家里了,明天如果还没有朋友拿到那99分,我再来试试看。我记得有这么几个方面的东西需要了解,也算是线索吧。
你试过在VB里面引用接口么?解决了这个问题,剩下的步骤和vc来做没什么区别了。
首先,解决这个问题需要用到一点vb里面不常用的东西。你查一下 Implements 这个 statement ,vb用它可以引入interface,还可以一定程度上模拟“继承”。
其次,需要查一下IE编程需要调用哪几个接口(不好意思,我不大记得,MSDN Library上有的东西我都不记——piggybrain)。然后用 implements引入这几个interface,并实现必需的方法。
另外可能还需要用到CallByName这个方法,因为你需要在你的vb程序中创建一个 class,然后传递这个class的一个instance给IE的接口作为callback的方法的载体来响应DHTML中的事件,例如:onmousemove。
(想吃老虎的小猪) #2楼 得分:0回复于:2002-03-18 10:12:56 我记得好像需要引用 IWebBrowser2 这个接口(shdocvw.dll),如果要处理DHTML中的events,引用 DWebBrowserEvents2 这个接口。
对了,我查了一下 MSDN Library,有这么两个标题对你可能有帮助:
Reusing the WebBrowser Control
Reusing MSHTML
新版本的MSDNLib真麻烦,基本都是.net framework的东西,卸载,重装之...(陈锐) #3楼 得分:50回复于:2002-03-18 10:25:44 tips:程序中如何监控网页中元素的事件
对编写脚本熟悉的读者都知道页面中可以添加脚本响应元素的事件,例如超链接的OnClick事件,图片的OnMouseMove事件,我们也可以使VB程序响应这些事件。下面是一个VB响应页面中按钮的Click事件的代码:
首先建立一个新工程,在Form1中加入一个Webbrowser控件,然后在Form1中加入以下代码:
Option Explicit
Public Sub Some_Procedure()
MsgBox "你点击了按钮. "
End Sub
Private Sub Form_Load()
'下载空页面
WebBrowser1.Navigate2 "about:blank "
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
'建立事件响应类
Dim cfForward As clsForward
'定义在浏览器中显示的HTML代码,其中包含一个按钮btnMyButton
Dim sHTML As String
sHTML = "
This is some text.
"sHTML = sHTML & "
And here is a button.
"sHTML = sHTML & " "
'将HTML代码写入浏览器
WebBrowser1.Document.body.innerHTML = sHTML
'将事件响应类连接到页面的按钮btnMyButton上
Set cfForward = New clsForward
cfForward.Set_Destination Me, "Some_Procedure "
WebBrowser1.Document.All( "btnMyButton ").onclick = cfForward
End Sub
向工程中添加一个Class Module,Class Module的Name属性设定为clsForward,在clsForward中添加以下代码:
Option Explicit
Dim oObject As Object
Dim sMethod As String
Dim bInstantiated As Boolean
Private Sub Class_Initialize()
bInstantiated = False
End Sub
Public Sub Set_Destination(oInObject As Object, sInMethod As String)
Set oObject = oInObject
sMethod = sInMethod
bInstantiated = True
End Sub
Public Sub My_Default_Method()
If bInstantiated Then
CallByName oObject, sMethod, VbMethod
End If
End Sub
运行程序,点击Webbrowser中的“Click this button”按钮。程序就会弹出消息框提示“你点击了按钮.”
(陈锐) #4楼 得分:0回复于:2002-03-18 10:28:04 上面的范例是监控一个有name属性的按钮,对于像图片这样的元素,你可以给它一个Name,或者遍历页面元素获得Img元素,下面是一个遍历页面元素的范例:
怎么用vb script脚本读出网页中radio选的值?
代码:
基本上就是通过遍历访问页面中的元素来实现的(想吃老虎的小猪) #5楼 得分:0回复于:2002-03-18 11:05:36 tips:程序中如何监控网页中元素的事件
这段代码很眼熟,从MSDN翻译的吧,呵呵
'将事件响应类连接到页面的按钮btnMyButton上
Set cfForward = New clsForward
cfForward.Set_Destination Me, "Some_Procedure "
WebBrowser1.Document.All( "btnMyButton ").onclick = cfForward
核心代码就这两句。
cfForward.Set_Destination object, Method_of_object (好比传递函数指针,这样的使用方式有点像c#里面的delegate,或者java中传递一个object的instance,并invoke某个method)。完全可以绑定另外的object的method,clsForward内部用 CallByName 来调用比如Form1(传入Me) 这个对象(你自己的其他对象也可以)的 Some_Procedure(Some_Procedure不需要参数,你可以传递其它方法,甚至调用事件处理方法如From1_OnUnload,并传递需要的参数)。
WebBrowser1.Document.All( "btnMyButton ").onclick = cfForward
绑定DHTML的event object到clsForward的实例。
不过WebBrowser不具备InternetExplorer的部分功能。我前面说需要引用几个interface说错了,不好意思。你的要求不用引用接口,那些interface是用来控制InternetExplorer的instance的,比如监控浏览器下载的内容如果是flash,就忽略(现在很多广告flash的循环做得不好,非常消耗cpu资源,而且flash存在恶意攻击的可能)...(想吃老虎的小猪) #6楼 得分:0回复于:2002-03-18 11:27:09 另外请教 TechnoFantasy(www.applevb.com)
我认为 CallByName 就“是” VB 的 Delegate,只是需要像delegate那样通过interface来约束项目中几个模块(比如不同的人写的)之间用这样的方法进行一些高级的refactory工作。不过眼下有个问题不明白,
Public Sub My_Default_Method()
If bInstantiated Then
CallByName oObject, sMethod, VbMethod
End If
End Sub
将某个方法设置为该类的默认方法,除了在vb的类生成工具中设置,还能怎么做呢?
比如除了手工修改 cls文件中,在该方法中加入
Attribute disConnect.VB_UserMemId = 0,有没有办法在写cls的代码的时候将该方法标注为默认方法(属性也是如此)呢?
(葡萄) #7楼 得分:0回复于:2002-03-18 12:22:40 tools -> procedure attributes-> advanced
set procedure id=(default)(小仙妹) #8楼 得分:0回复于:2002-03-18 12:46:41 还是头一次听说有这种用法的,我会好好研究一下的。分数我已经预备好了!(看看上面是不是100分?)。晚上我回家做做看,如果没有任何疑问就加分了。
webbrowser,如何替换html中的img路径
如何在html中响应ActiveX控件的事件
在中如何插入WebBrowser这个控件
如何在vb中屏蔽webbrowser右键
在VB中如何去掉WebBrowser控件的滚动条?
如何在C#中的WebBrowser控件中调用*.chm 文件
如何在HTML里弹出FLASH窗口。谢谢
如何在静态HTML页面里设置分页显示??
在xml语言里如何插入html代码和javascript?
如何在FLASH里调用html网页?!紧急!!有分!
如果电子书里没有index.html会如何?index.html文件应该放在哪里?
webbrowser如何拦截window.open
在DELPHI中,如何让WebBrowser读取并显示.Mht格式的文件!满分求助!!!
VB2005速成版中滚动条如何使用在WebBrowser中?
电子书中的index.html文件应该放在哪里?如果电子书里没有index.html会如何?
VB 如何去掉滚动条 WebBrowser
如何取得webbrowser控件中的内容
vb 如何获得webbrowser控件的坐标?
用WebBrowser在google上面写字
如何在MSN Space的Custom HTML板块里使一个超链接使用新窗口打开?
在线等候!请教如何在msn里html模块中添加在线flash视频?
在线等候!请教如何在msn里html模块中添加在线flash或其它视频?
如何在外部使用被写在HTML里的JS数据!!?
想在HTML文件中插入HTML文件,如何操作?