WinForm项目开发中WebBrowser用法实例汇总
本文实例汇总了WinForm项目开发中WebBrowser用法,希望对大家项目开发中使用WebBrowser起到一定的帮助,具体用法如下:
1.
[PermissionSet(SecurityAction.Demand,Name="FullTrust")] [ComVisibleAttribute(true)] publicpartialclassfrmWebData:Form { publicfrmWebData() { InitializeComponent(); } protectedoverridevoidOnLoad(EventArgse) { wbService.ObjectForScripting=this; base.OnLoad(e); } }
2.后台调用Javascript脚本
<scripttype="text/javascript"language="javascript"> functionErrorMessage(message){ document.getElementById("error").innerText=message; } </script> 后台代码 staticstringErrorMsg=string.Empty; privatevoidwbService_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse) { if(!string.IsNullOrEmpty(ErrorMsg)) wbService.Document.InvokeScript("ErrorMessage",newobject[1]{string.Format("操作失败,原因:{0}!",ErrorMsg)}); }
3.JavaScript脚本调用后台方法
脚本代码
<divid="content"> <h2id="error"> 操作正在响应中.....</h2> <divclass="utilities"> <aclass="buttonright" onclick="window.external.DoSvrWebDbBack()">
刷新
</a> <!--<aclass="buttonright" onclick="window.external.NavigateToLogin()">重新登录</a>--> <divclass="clear"> </div> </div> </div>
后台代码
publicvoidDoSvrWebDbBack() { try { } catch(TimeoutException) { ErrorMsg="超时,请稍候再尝试!"; } catch(Exceptionex) { ErrorMsg=ex.Message.ToString(); } }
4.设置cookie
Cookie_cookie=BaseWinForm.LoginMessage.SessionID2; InternetSetCookie(BaseWinForm.LoginMessage.SvrWebDbBack,"ASP.NET_SessionId",_cookie.Value); wbService.Navigate(BaseWinForm.LoginMessage.SvrWebDbBack,null,null,string.Format("Referer:{0}",BaseWinForm.LoginMessage.SvrWebDbLoingUrl)); [DllImport("wininet.dll",CharSet=CharSet.Auto,SetLastError=true)] publicstaticexternboolInternetSetCookie(stringurlName,stringcookieName,stringcookieData);
5.请求链接获取返回处理
publicclassHttpWebRequestToolV2 { publicdelegateHttpWebRequestRequestRule(stringurl); ///<summary> ///发起HttpWebResponse请求 ///</summary> ///<paramname="url">请求连接</param> ///<paramname="credentials">请求参数</param> ///<paramname="httpWebRequestRule">请求设置『委托』,当委托等于NULL的时候,默认请求;否则使用所设置的HttpWebRequest</param> ///<returns>HttpWebResponse</returns> publicstaticHttpWebResponseCreateHttpWebRequest(stringurl,byte[]credentials,RequestRulehttpWebRequestRule) { if(string.IsNullOrEmpty(url)) thrownewArgumentNullException("url"); HttpWebRequest_request=null; if(httpWebRequestRule!=null) { _request=httpWebRequestRule(url); } else { _request=WebRequest.Create(url)asHttpWebRequest; _request.Method="POST"; _request.ContentType="application/x-www-form-urlencoded"; _request.CookieContainer=newCookieContainer(); } if(credentials!=null) { _request.ContentLength=credentials.Length; using(varrequestStream=_request.GetRequestStream()) { requestStream.Write(credentials,0,credentials.Length); } } return_request.GetResponse()asHttpWebResponse; } ///<summary> ///创建验证凭证 ///eg: ///IDictionary<string,string>_requestCredentials=newDictionary<string,string>(); ///_requestCredentials.Add("UserName",_userName); ///_requestCredentials.Add("PassWord",_userPwd); ///_requestCredentials.Add("MacAddress",_macAddress); ///byte[]_credentials=HttpWebRequestToolV2.CreateCredentials(_requestCredentials,Encoding.UTF8); ///</summary> ///<returns></returns> publicstaticbyte[]CreateCredentials(IDictionary<string,string>credentials,Encodingencoding) { if(credentials==null) thrownewArgumentNullException("credentials"); if(credentials.Count==0) thrownewArgumentException("credentials"); if(encoding==null) thrownewArgumentNullException("encoding"); StringBuilder_credentials=newStringBuilder(); foreach(KeyValuePair<string,string>credentialincredentials) { _credentials.AppendFormat("{0}={1}&",credential.Key,credential.Value); } string_credentialsString=_credentials.ToString().Trim(); int_endIndex=_credentialsString.LastIndexOf('&'); if(_endIndex!=-1) _credentialsString=_credentialsString.Substring(0,_endIndex); returnencoding.GetBytes(_credentialsString); }
使用示例
publicstaticHttpWebRequestRequestSetting(stringurl) { HttpWebRequest_request=null; _request=WebRequest.Create(url)asHttpWebRequest; _request.Method="POST"; _request.ContentType="application/x-www-form-urlencoded"; _request.Timeout=1000*10;//超时五秒 _request.CookieContainer=newCookieContainer(); return_request; } ///<summary> ///登录web网页验证 ///</summary> ///<paramname="url">超链接</param> ///<paramname="_userName">用户名</param> ///<paramname="_userPwd">密码</param> ///<paramname="_macAddress">MAC地址</param> ///<paramname="sessionID">会话</param> ///<returns>网页登录验证是否成功『失败,将抛出网页验证验证失败信息』</returns> publicboolProcessRemoteLogin(stringurl,string_userName,string_userPwd,string_macAddress,outCookiesessionID) { bool_checkResult=false; string_errorMessage=string.Empty; //--------------------创建登录凭证-------------------- IDictionary<string,string>_requestCredentials=newDictionary<string,string>(); _requestCredentials.Add("UserName",_userName); _requestCredentials.Add("PassWord",_userPwd); _requestCredentials.Add("MacAddress",_macAddress); byte[]_credentials=HttpWebRequestToolV2. CreateCredentials (_requestCredentials,Encoding.UTF8); //----------------------------------------------------- CookieCollection_cookie=null; /* *LoginType1:成功0:失败 *Err失败原因 */ using(HttpWebResponse_httpRespone=HttpWebRequestToolV2. CreateHttpWebRequest (url,_credentials,RequestSetting)) { _cookie=newCookieCollection(); if(_httpRespone.Cookies.Count>0) _cookie.Add(_httpRespone.Cookies); } //------------------------------------------------------- Cookie_loginType=_cookie["LoginType"]; sessionID=_cookie["ASP.NET_SessionId"]; Cookie_err=_cookie["Err"]; if(_loginType!=null&&_err!=null&&sessionID!=null) { _checkResult=_loginType.Value.Equals("1"); if(!_checkResult) _errorMessage=HttpUtility.UrlDecode(_err.Value); } else { _errorMessage="Web服务异常,请稍候在试!"; } if(!string.IsNullOrEmpty(_errorMessage)) thrownewException(_errorMessage); return_checkResult; }
6.从WebBrowser中获取CookieContainer
///<summary> ///从WebBrowser中获取CookieContainer ///</summary> ///<paramname="webBrowser">WebBrowser对象</param> ///<returns>CookieContainer</returns> publicstaticCookieContainerGetCookieContainer(thisWebBrowserwebBrowser) { if(webBrowser==null) thrownewArgumentNullException("webBrowser"); CookieContainer_cookieContainer=newCookieContainer(); string_cookieString=webBrowser.Document.Cookie; if(string.IsNullOrEmpty(_cookieString))return_cookieContainer; string[]_cookies=_cookieString.Split(';'); if(_cookies==null)return_cookieContainer; foreach(stringcookieStringin_cookies) { string[]_cookieNameValue=cookieString.Split('='); if(_cookieNameValue.Length!=2)continue; Cookie_cookie=newCookie(_cookieNameValue[0].Trim().ToString(),_cookieNameValue[1].Trim().ToString()); _cookieContainer.Add(_cookie); } return_cookieContainer; }