熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

vs2008 webbrowser與網頁雙向通信的方法

2013-11-13 10:23:32  來源: .NET編程 

  現在很多軟件都做成了內嵌浏覽器的形式vs中的webbrwser控件即可以實現此功能當然不能說中的webbrowser是個新東西他只不過將以前的msthml做了一次不完全封裝姑且不論其封裝的如何至少我們在使用它時不需要向以前一樣頻繁的調用令人討厭的IHTMLDocumentIHTMLDocumentIHTMLDocumentIHTMLDocument而且新版的webbrowser是線程安全的!這點最重要

  以下代碼片段均摘自我的一個項目

  下面看看webbrowser如何調用調用頁面裡的Javascript

  C#段

  代碼

  void ShowTable(string sid) {

  SetWebBorserSafe(webBrowser Showdisplay sid);

  }

  public void SetWebBorserSafe(object ostring sstring tag)//保證線程安全

  {

  if (o == webBrowser)

  {

  if (thiswebBrowserInvokeRequired)

  {

  BeginInvoke(new SetWebBroserCallback(SetWebBorserSafe) new object[] { webBrowser s tag });

  }

  else

  {

  webBrowserDocumentInvokeScript(s new String[] { tag});

  }

  }

  }

  去掉干擾代碼其實最關鍵的代碼是

  webBrowserDocumentInvokeScript(s new String[] { tag});

  JavaScript段

  function Showdisplay(id) {

  if (documentgetElementById(id)) {

  var traget = documentgetElementById(id);

  tragetstyledisplay = ;

  }

  }

  上面的代碼實現了在C#程序中輸入頁面的ID號頁面中的對應ID的元素顯示功能

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  JavaScript調用C#程序

  反向調用有點小步驟

  aC#代碼段讓JavaScript能夠看見接口

  [ComVisible(true)]   //com接口可見

  public partial class FormPD : Form

  {

  

  }

  bC#代碼段讓寄宿的腳本能夠訪問

  private void FormPD_Load(object sender EventArgs e)

  {

  webBrowserObjectForScripting = this;

  }

  當然你也可以把 webBrowserObjectForScripting = this; 寫在窗口初始化代碼裡

  cJavaScript和網頁的相關代碼

  代碼

  <script type=text/javascript>

  function getSel() {

  var t=;

  t= windowgetSelection ? windowgetSelection() : (documentgetSelection ? documentgetSelection() : (documentselection ? documentselectioncreateRange()Text : ))

  windowexternalShowPrint(實時數據t);

  }

  </script>

  <body onmouseup=getSel()>

  關鍵代碼  windowexternalShowPrint(實時數據t);

  dC#代碼段

  代碼

  public void ShowPrint(string fromnamestring selecthtmltext)

  {

  //實時數據t

  FormSavePrint f = new FormSavePrint(實時數據selecthtmltext);

  fMdiParent = formmain;

  fShow();

  }

  OK!上面可以實現當鼠標選中網頁的某些區域時此區域的頁面代碼被傳入到C#程序的新窗口中

  總體說來比以前的mshtml使用要方便多了


From:http://tw.wingwit.com/Article/program/net/201311/13461.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.