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);                                                                   //非异步且在运行,则阻塞当前方法
            }
        }