public string addValueChangeListener(string valueKey, CefSharp.IJavascriptCallback callback) { var listener = new StorageSystem.Listener() { data = valueKey, callback = callback }; listener.ID = listener.GetHashCode().ToString(); valueChangeListeners.Add(listener.ID, listener); myLisener.Add(listener.ID); return(listener.ID); }
public void xmlhttpRequest(Dictionary <string, object> variables) { if (!variables.ContainsKey("url")) { throw new Exception("参数不全,撤退!"); } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(variables["url"].ToString()); CefSharp.IJavascriptCallback onLoad = null; CefSharp.IJavascriptCallback onTimeout = null; bool isAsync = false; foreach (KeyValuePair <string, object> kvp in variables) { switch (kvp.Key.ToLower()) { case "method": request.Method = kvp.Value.ToString(); break; case "headers": Dictionary <string, string> headers = ObjDic2StrDic((Dictionary <string, object>)kvp.Value); foreach (KeyValuePair <string, string> item in headers) { switch (item.Key.ToLower()) { case "refer": request.Referer = item.Value; break; case "user-agent": request.UserAgent = item.Value; break; case "content-type": request.ContentType = item.Value; break; default: if (request.Headers.AllKeys.Contains(item.Key)) { request.Headers[item.Key] = item.Value; } else { request.Headers.Add(item.Key, item.Value); } break; } } break; case "timeout": request.Timeout = (int)kvp.Value; break; case "onload": onLoad = (CefSharp.IJavascriptCallback)kvp.Value; break; case "ontimeout": onTimeout = (CefSharp.IJavascriptCallback)kvp.Value; break; case "data": WriteRequestStream(request, kvp.Value.ToString()); break; case "async": isAsync = (bool)kvp.Value; break; } } var workingthread = new Thread(new ThreadStart(() => { try { HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); Stream stream = resp.GetResponseStream(); string result; //获取响应内容 using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } XHRResult res = new XHRResult() { status = (int)resp.StatusCode, responseText = result }; onLoad?.ExecuteAsync(res); } catch (WebException ex) { if (ex.Message.IndexOf("超时") > 0) { onTimeout?.ExecuteAsync(); return; } HttpWebResponse resp = (HttpWebResponse)ex.Response; XHRResult res = new XHRResult() { status = (int)resp.StatusCode, responseText = "" }; if (resp.StatusCode == HttpStatusCode.RequestTimeout || resp.StatusCode == HttpStatusCode.GatewayTimeout) { onTimeout?.ExecuteAsync(); } else { onLoad?.ExecuteAsync(res); } } })); workingthread.Start(); while ((!isAsync) && workingthread.ThreadState == ThreadState.Running) { Thread.Sleep(0); //非异步且在运行,则阻塞当前方法 } }