加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

vb.net WebBrowser页面与WinForm交互技巧

发布时间:2020-12-24 11:40:36 所属栏目:站长百科 来源:网络整理
导读:最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧。 话说有了WebBrowser类,终于不用自己手动封装SHDocVw的AxWebBrowser这个ActiveX控件了。这个类如果仅仅作为一个和IE一模一样浏览器,那就太没意思了

上面的两段代码都是为了清晰易懂而精简得不能再简的,有很多地方很不完善。比如,没考虑到如何从高亮显示状态复原;也没有大小写匹配等等。当然,掌握了原理之后相信这些都不会太难。

这两种方法各有优缺点:
使用TextRange较轻量迅速,而且有一个特长,就是可以把跨标签(Tag)的关键字挑出来。例如,有这么一段HTML:

<b>Hel</b>loWorld!

先不管作者出于什么目的让Hel三个字母成为粗体,总之显示在页面上的是一句“Hello World!”。在我们希望高亮页面中的“Hello”这个关键字时,如果用DOM分析的话,会得出含有“Hel”的<b>节点和文本节点“lo World!”两个节点,因此无法将其挑出来。而TextRange则能正确识别,将其设置为高亮。因此也可以说TextRange是只和文本有关,和HTML语法结构无关的对象。

但是,TextRange也有其致命缺点,加亮容易,反向的话就很难。换句话说,去除高亮显示的时候不能再用TextRange,而需要采用其他方法。

而DOM方法则正好相反, 由于DOM的树状结构特性,虽然不能(或者很难)跨越Tag搜索关键字,但是去除高亮显示并不繁琐。

Study Case 5:与脚本的互操作

在Case 1当中,我们已经看到,Web页面的HTML元素的事件,可以由Windows Form端来响应,可以在某种程度上看作是Web页面调用WinForm;那么反过来,WinForm除了可以直接访问Web页面的HTML元素之外,能否调用Web页面里的各种Script呢?

首先是调用Web页面的脚本中已经定义好的函数。假设HTML中有如下Javascript:

function DoAdd(a,b){
returna+ b;
}

那么,我们要在WinForm调用它,只需如下代码即可:

objectoSum=webBrowser.Document.InvokeScript("DoAdd",newobject[]{1,2 });
intsum=Convert.ToInt32(oSum);

其次,如果我们想执行一段Web页面中原本没有的脚本,该怎么做呢?这次.Net的类没有提供,看来还要依靠COM了。IHTMLWindow2可以将任意的字符串作为脚本代码来执行。

stringscriptline01=@"functionShowPageInfo(){" ;
stringscriptline02=@"varnumLinks=document.links.length;" ;
stringscriptline03=@"varnumForms=document.forms.length;" ;
stringscriptline04=@"varnumImages=document.images.length;" ;
stringscriptline05=@"varnumScripts=document.scripts.length;" ;
stringscriptline06=@"alert('网页的统计结果:rn链接数:'+numLinks+" ;
stringscriptline07=@"'rn表单数:'+numForms+" ;
stringscriptline08=@"'rn图像数:'+numImages+" ;
stringscriptline09=@"'rn脚本数:'+numScripts);}" ;
stringscriptline10=@"ShowPageInfo();" ;

stringstrScript=scriptline01+scriptline02+scriptline03+scriptline04+scriptline05+
scriptline06 +scriptline07+scriptline08+scriptline09+ scriptline10;

IHTMLWindow2win= (IHTMLWindow2)webBrowser.Document.Window.DomWindow;
win.execScript(strScript,"Javascript");

OK,今天就写到这里吧,再想起什么来再补充吧。欢迎大家多多指正,欢迎讨论。

其它备注:

如何获取引发单击(onclick)事件的网页元素?
我将网页上两个文本框元素 添加事件处理程序:

VB.NET code
htmldocuments=webbrowser1.document
htmldocuments.GetElementById("YYYY").AttachEventHandler("onfocus",AddressOf LabelShow)
htmldocuments.GetElementById("XXXX").AttachEventHandler("onfocus",AddressOf LabelShow)

Private Sub LabelShow
  '在此处,我如何才能得到处发这个事件的元素ID,也就是YYYY或是XXXX

End Sub 



非常着急。

------解决方案--------------------------------------------------------

VB.NET code
    Private Sub LabelShow(sender As Windows.Forms.HtmlElement,e As EventArgs)

    End Sub

------解决方案--------------------------------------------------------
要想获得你想要的id 那这个自定义函数的委托要正确,换句话说自定义函数跟触发条件的签名是要一致的,楼上的兄弟已经给你样板了。
				

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读