最近由於工作需要,研究了下Winform的WebBrowser控件,在這里給大家分享下。
1、WebBrowser導航
WebBrowser在進行導航的時候需要用到Navigate(string urlString)方法
2、執行已有的JavaScript函數
使用WebBrowser.Document.InovkeScript(string scriptName)
3、執行自定義的Javascript函數
這里需要先將自定義的Javascript寫入到WebBrowser.Document.Body中,然后使用InvokScript()方法執行函數。
這里需要引用Microsoft.mshtml.dll
例子:

public static class WebBrowserHelper { /// <summary> /// 創建一個Javascript標簽並附加到Document中 如<script type="text/javascript">function(){} </script> /// </summary> /// <param name="browser"></param> /// <param name="script"></param> /// <returns></returns> public static void CreateJSElement(WebBrowser browser, string script) { var tag = browser.Document.CreateElement("script"); var scriptElement = tag.DomElement as IHTMLScriptElement; scriptElement.type = "text/javascript";//設定為Javascript scriptElement.text = script;//設置內容 browser.Document.Body.AppendChild(tag); } }
這里我們用一個方法 將自定義的JS Append到Document中,調用剛剛的方法

public void RunJS(WebBrowser browser) { string scriptStr="function sayHello(){ alert(\"Hello\");}";//我們要執行的自定義函數 WebBrowserHelper.CreateJSElement(browser,scriptStr);//將這段函數附加到Document中 browser.Doucment.InvokeScript("sayHello");//執行sayHello()函數 }
4、獲取並處理Javascript函數的返回值
InvokeScript(string scriptName)方法會返回一個Object類型的返回值
如果這個值的類型是Javascript中的 String、Number類型,可以直接調用Convert.ToString(),Convert.ToInt32() 進行轉換並取值使用
如果這個值得類型是Javascript中的 Object、Array 類型,則返回一個System.__ComObject類型的對象,目前為止還沒找到如何取值的辦法,因此這里我選擇提供一個自定義函數,將我們要的返回值序列化為JSON字符串再返回。
由於WebBrowser不支持HTML5標准,無法使用JSON.stringify()函數,這里我們需要引用其他序列化JS對象的插件。
這里推薦 Jquery-Json 在這里下載
使用方式很簡單 $.toJSON(object);
總體上遇到並解決的問題就是這些了 具體的一些代碼 可以 下載DEMO