首页  ·  知识 ·  编程语言
vs2008webbrowser与网页双向通信的方法
网友  收集  .NET  编辑:德仔   图片来源:网络
现在很多软件都做成了内嵌浏览器的形式,vs2008中的webbrwser控件即可以实现此功能。当然不能说2008中的webbrowser是个新东西,他只不过将以前的mst
现在很多软件都做成了内嵌浏览器的形式,vs2008中的webbrwser控件即可以实现此功能。当然不能说2008中的webbrowser是个新东西,他只不过将以前的msthml做了一次不完全封装。姑且不论其封装的如何,至少我们在使用它时不需要向以前一样频繁的调用令人讨厌的IHTMLDocument、IHTMLDocument2、IHTMLDocument3、IHTMLDocument4..........而且新版的webbrowser是线程安全的!这点最重要。
  以下代码片段均摘自我的一个项目。
  1.下面看看webbrowser如何调用调用页面里的Javascript:
  C#段:
  代码
  void ShowTable(string sid) {
  SetWebBorserSafe(webBrowser1, "Showdisplay", sid);
  }
  public void SetWebBorserSafe(object o,string s,string tag)//保证线程安全
  {
  if (o == webBrowser1)
  {
  if (this.webBrowser1.InvokeRequired)
  {
  BeginInvoke(new SetWebBroserCallback(SetWebBorserSafe), new object[] { webBrowser1, s, tag });
  }
  else
  {
  webBrowser1.Document.InvokeScript(s, new String[] { tag});
  }
  }
  }
  去掉干扰代码其实最关键的代码是:
  webBrowser1.Document.InvokeScript(s, new String[] { tag});
  JavaScript段:
  function Showdisplay(id) {
  if (document.getElementById(id)) {
  var traget = document.getElementById(id);
  traget.style.display = "";
  }
  }
  上面的代码实现了在C#程序中输入页面的ID号,页面中的对应ID的元素显示功能。
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2.JavaScript调用C#程序
  反向调用有点小步骤
  a.C#代码段让JavaScript能够看见接口
  [ComVisible(true)]   //com接口可见
  public partial class FormPD : Form
  {
  ...............
  }
  b.C#代码段让寄宿的脚本能够访问
  private void FormPD_Load(object sender, EventArgs e)
  {
  webBrowser1.ObjectForScripting = this;
  }
  当然你也可以把 webBrowser1.ObjectForScripting = this; 写在窗口初始化代码里。
  c.JavaScript和网页的相关代码
  代码
  <script type="text/javascript">
  function getSel() {
  var t="";
  t= window.getSelection ? window.getSelection() : (document.getSelection ? document.getSelection() : (document.selection ? document.selection.createRange().Text : ""))
  window.external.ShowPrint("实时数据",t);
  }
  </script>
  <body onmouseup="getSel()">
  关键代码:  window.external.ShowPrint("实时数据",t);
  d.C#代码段
  代码
  public void ShowPrint(string fromname,string selecthtmltext)
  {
  //"实时数据",t
  FormSavePrint f = new FormSavePrint("实时数据",selecthtmltext);
  f.MdiParent = formmain;
  f.Show();
  }
  OK!上面可以实现当鼠标选中网页的某些区域时,此区域的页面代码被传入到C#程序的新窗口中。
  总体说来比以前的mshtml使用要方便多了
 
本文作者:网友 来源:网络收集
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读