使用AJAX,JAVASCRIPT,.NET,ATL 项目打造超快速信息采集系统

大家好,我们一起来研究一个信息采集系统的设计,如果您有更好的方案请在评论中阐述 谢谢

 

近期做了一个在线工具网站 http://www.webtool.cn/, 网站整体采用AJAX设计,全静态处理。

在项目中需要访问一些网络资源,并进行资源处理。

 

但是遇到了以下几个问题。

1.服务端处理压力过重,如果访问量较大 那么势必会影响整体速度;

2.如果使用AJAX去访问网络资源,那么会有跨域权限问题;

3.如果某工具的使用量比较大,那么以服务端IP去频繁爬某一网络资源很有可能会被封IP。

 

综合以上的问题,我们想到了用客户端去采集网络资源,并使用JS正则分析的方式去处理。

 

好,现在开始说说怎样来完成这一系列工作:

首先,请看看效果:

http://www.webtool.cn/tools/list/n2399997.htm

此工具名为网上购物价格比较,可以迅速实时的获取包括淘宝网、拍拍网、易趣网、京东网、当当网、卓越网在内的大型B2C,C2C购物网站数据,并进行数据处理

为客户提供一个商品比较的功能。

我们先看看使用的效果图

此列表是可以展开的,可以查看更多的商品,并且可以通过链接直接到达商品的内容页面。

 

怎么实现的呢?

第一步,javascript 通过AJAX 访问位于服务端的C#代码,获取返回的结果框架和JS函数,这些函数主要是用于提供ACTIVEX 调用的回调函数。

sys.tools.getResults(...)

第二步,C#返回responseText和脚本

来一段代码

 

代码
  1  public override string DoCollectResult(string[] paras, Tagus.Model.ToolInfo tool)
  2         {
  3             string key = paras[4];
  4             string price = paras[5];
  5             string range = paras[6];
  6             string[] sites = paras[7].Split('|');
  7             string[] parms = paras[8].Split('|');
  8             bool checkTaobao = (sites[0== "1"? true : false;
  9             bool checkPaipai = (sites[1== "1"? true : false;
 10             bool checkDangdang = (sites[2== "1"? true : false;
 11             bool checkJingdong = (sites[3== "1"? true : false;
 12             bool checkZhuoyue = (sites[4== "1"? true : false;
 13             bool checkEbay = (sites[5== "1"? true : false;
 14             bool showTack = (parms[0== "1"? true : false;
 15             bool showImg = (parms[1== "1"? true : false;
 16             bool showXinyong = (parms[2== "1"? true : false;
 17 
 18 
 19 
 20             string line = "search?q={0}&commend=all&sort=price-asc&style=list&isnew=2&viewIndex=7&source=search1&start_price={1}&end_price={2}&filter=reserve_price%5B{3}%2C{4}%5D&s={5}#J_FilterTabBar";
 21             double prc = double.Parse(price);
 22             double rag = double.Parse(range);
 23             string price_start = Convert.ToString(prc - rag);
 24             string price_end = Convert.ToString(prc + rag);
 25             key = System.Web.HttpUtility.UrlDecode(key);
 26             string linf = string.Format(line, System.Web.HttpUtility.UrlEncode(key, System.Text.Encoding.GetEncoding("gb2312")), price_start, price_end, price_start, price_end, "0");
 27             BaseCollectActiveXObject axoTaobao = new BaseCollectActiveXObject();
 28 
 29             axoTaobao.CallBack = "CreateTaobaoItems";
 30             axoTaobao.CharSet = "gbk";
 31             axoTaobao.Domain = "search.taobao.com";
 32             axoTaobao.Flag = "taobao_item";
 33             axoTaobao.Method = "get";
 34             axoTaobao.Params = "";
 35             axoTaobao.Path = linf;
 36             axoTaobao.Port = "1129";
 37             axoTaobao.Referer = "";
 38             axoTaobao.RefUrl = "tools/sapi/tool.ashx";
 39             axoTaobao.TID = DES.Encrypt("2399997");
 40 
 41             base.AddResources(axoTaobao);
 42 
 43             string ppath = "cgi-bin/comm_search?KeyWord={0}&PTAG=30415.1.1";
 44             ppath = string.Format(ppath, key);
 45 
 46             BaseCollectActiveXObject axoPaiPai = new BaseCollectActiveXObject();
 47             axoPaiPai.CallBack = "ProxyPaiPaiItems";
 48             axoPaiPai.CharSet = "gb2312";
 49             axoPaiPai.Domain = "search.paipai.com";
 50             axoPaiPai.Flag = "paipai_item";
 51             axoPaiPai.Method = "get";
 52             axoPaiPai.Params = "";
 53             axoPaiPai.Path = ppath;
 54             axoPaiPai.Port = "8080";
 55             axoPaiPai.Referer = "";
 56             axoPaiPai.RefUrl = "tools/sapi/tool.ashx";
 57             axoPaiPai.TID = DES.Encrypt("2399997");
 58             base.AddResources(axoPaiPai);
 59 
 60             string jdPath = "Search?keyword={0}&psort=2&r={1}-{2}";
 61             jdPath = string.Format(jdPath, key, price_start, price_end);
 62 
 63             BaseCollectActiveXObject axoJD = new BaseCollectActiveXObject();
 64             axoJD.CallBack = "CreateJDItems";
 65             axoJD.CharSet = "gbk";
 66             axoJD.Domain = "search.360buy.com";
 67             axoJD.Flag = "jd_item";
 68             axoJD.Method = "get";
 69             axoJD.Params = "";
 70             axoJD.Path = jdPath;
 71             axoJD.Port = "8080";
 72             axoJD.Referer = "";
 73             axoJD.RefUrl = "tools/sapi/tool.ashx";
 74             axoJD.TID = DES.Encrypt("2399997");
 75             base.AddResources(axoJD);
 76 
 77             string zyPath = "s/ref=nb_ss?url=search-alias%3Daps&keywords={0}&searchKind=keyword";
 78             zyPath = string.Format(zyPath, key);
 79 
 80             BaseCollectActiveXObject axoZY = new BaseCollectActiveXObject();
 81             axoZY.CallBack = "CreateZYItems";
 82             axoZY.CharSet = "utf-8";
 83             axoZY.Domain = "www.amazon.cn";
 84             axoZY.Flag = "zy_item";
 85             axoZY.Method = "get";
 86             axoZY.Params = "";
 87             axoZY.Path = zyPath;
 88             axoZY.Port = "8080";
 89             axoZY.Referer = "";
 90             axoZY.RefUrl = "tools/sapi/tool.ashx";
 91             axoZY.TID = DES.Encrypt("2399997");
 92             base.AddResources(axoZY);
 93             string ddPath = "mall/search_mall.php?sort=1&q={0}&cat=&lowp={1}&highp={2}&loc=&guan=&store=";
 94             string ddk = "";
 95             ddk = System.Web.HttpUtility.UrlEncode(key, System.Text.Encoding.GetEncoding("gb2312"));
 96             ddPath = string.Format(ddPath, ddk, price_start, price_end);
 97             BaseCollectActiveXObject axoDD = new BaseCollectActiveXObject();
 98             axoDD.CallBack = "CreateDDItems";
 99             axoDD.CharSet = "gb2312";
100             axoDD.Domain = "search.dangdang.com";
101             axoDD.Flag = "dd_item";
102             axoDD.Method = "get";
103             axoDD.Params = "";
104             axoDD.Path = ddPath;
105             axoDD.Port = "8080";
106             axoDD.Referer = "";
107             axoDD.RefUrl = "tools/sapi/tool.ashx";
108             axoDD.TID = DES.Encrypt("2399997");
109             base.AddResources(axoDD);
110 
111             string epm = "keyword={0}&category=0";
112             epm = string.Format(epm, System.Web.HttpUtility.UrlEncode(key, System.Text.Encoding.GetEncoding("utf-8")));
113             BaseCollectActiveXObject axoEbay = new BaseCollectActiveXObject();
114             axoEbay.CallBack = "proxyEBayItems";
115             axoEbay.CharSet = "utf-8";
116             axoEbay.Domain = "search.eachnet.com";
117             axoEbay.Flag = "ebay_item";
118             axoEbay.Method = "post";
119             axoEbay.Params = epm;
120             axoEbay.Path = "Search";
121             axoEbay.Port = "8080";
122             axoEbay.Referer = "";
123             axoEbay.RefUrl = "tools/sapi/tool.ashx";
124             axoEbay.TID = DES.Encrypt("2399997");
125             base.AddResources(axoEbay);
126 
127 
128             StringBuilder sb = new StringBuilder();
129             switch (paras[9])
130             {
131                 case "frame":
132                     sb.Append("<table class='sys_output_table sys_td_center' style='width:100%;'>");
133                     sb.Append("<tr>");
134                     sb.Append("<th>网站</th>");
135                     sb.Append("<th>图片</th>");
136 
137                     sb.Append("<th>名称</th>");
138                     sb.Append("<th>价格</th>");
139                     sb.Append("<th>商家地址</th>");
140                     if (showXinyong)
141                     {
142                         sb.Append("<th>信誉</th>");
143                     }
144                     sb.Append("<th>商家</th>");
145                     sb.Append("</tr>");
146 
147                     if (checkTaobao)
148                         buildImageFrame(sb, "淘宝网", showImg, "trTaobao""taobao_child");
149                     if (checkPaipai)
150                         buildImageFrame(sb, "拍拍网", showImg, "trPaipai","pp_child");
151                     if (checkEbay)
152                         buildImageFrame(sb, "易趣网", showImg, "trEBay""ebay_child");
153                     if (checkDangdang)
154                         buildImageFrame(sb, "当当网", showImg, "trDangdang","dd_child");
155                     if (checkJingdong)
156                         buildImageFrame(sb, "京东网", showImg, "trJingdong","jd_child");
157                     if (checkZhuoyue)
158                         buildImageFrame(sb, "卓越网", showImg, "trZuoyue","zy_child");
159                     sb.Append("</table>");
160                     sb.Append("<script>");
161                     sb.Append("function ProxyPaiPaiItems(obj){");
162                     sb.Append("   var mtsv;");
163                     sb.Append("   var data = obj.responseText.toString();");
164                     sb.Append("   var index = data.indexOf('Location');");
165                     sb.Append("   if(index > 0 && index < 500){");
166                     sb.Append("      var ps = /location[\\s\\S]*?http:\\/\\/([^\\/]*?)\\/([\\s\\S]*?\\.html)/gi;");
167                     sb.Append("      if(mtsv = ps.exec(data)){"); //如果匹配则说明还要转址
168                     sb.Append("         var path = mtsv[2];");//首先需要执行字符串替换
169                     sb.Append("         if(path){");
170                     sb.Append("            path = path.replace(/-1-40-([\\d]{2})/,'-1-40-6');");
171                     sb.Append("            path = path.replace(/4-3([\\s\\S]{3}-2-[0|2]--128-[0|1]-0)/gi,'4-3--" + Convert.ToString(int.Parse(price_start) * 100+ "-" + Convert.ToString(int.Parse(price_end) * 100+ "-2-0--128-1-0');");
172                     sb.Append("            path = path.replace(/\\s+?/g,'');");
173                     sb.Append("            sys.behavior.$doAX($('tid').value,mtsv[1],'8080',path,'get','','paipai_proxy','tools/sapi/tool.ashx','','gb2312','ProxyPaiPaiItems');");
174                     sb.Append("         }");
175                     sb.Append("      }");
176                     sb.Append("   }");
177                     sb.Append("   else{");
178                     sb.Append("      CreatePaipaiItems(data);");
179                     sb.Append("   }");
180                     sb.Append("}");
181                     sb.Append("function CreatePaipaiItems(data){");
182                     sb.Append("      var res = data;");
183                     sb.Append("      var mts;");
184                     sb.Append("      var ppPatten = /<li[^\\\"]*?\\\"item_list\\\">[\\s\\S]*?<span class=\\\"name\\\"><a[^>]*?href=\\\"([^\\\"]*?)\\\"[^>]*?>([\\s\\S]*?)<\\/a>[\\s\\S]*?<img[^>]*?init_src=\\\"([^\\\"]*?)\\\" \\/>[\\s\\S]*?<li class=\\\"place\\\">([^>]*?)<\\/li>[\\s\\S]*?<li class=\\\"price\\\">\\s*?<em>([^<]*?)<\\/em>[\\s\\S]*?<a[^>]*?href=\"([^\\.\\\"]*?\\.paipai.com)\\\"[^>]*?>([^<]*?)<\\/a>[\\s\\S]*?<\\/li>/gi;");
185                     sb.Append("      var x = 0;");
186                     sb.Append("      var Paipai_child_td_table = $crt('table');");
187                     sb.Append("      while(mts = ppPatten.exec(res)){");
188                     sb.Append("         if(x == 0){");
189                     sb.Append("            $('trPaipai').cells[1].innerHTML = '<img src=\"'+ mts[3] +'\"/>';");
190                     sb.Append("            $('trPaipai').cells[2].innerHTML = '<a href=\"' + mts[1] + '\" target=\"_blank\">' + mts[2] + '</a>';");
191                     sb.Append("            $('trPaipai').cells[3].innerHTML = mts[5];");
192                     sb.Append("            $('trPaipai').cells[4].innerHTML = mts[4];");
193                     sb.Append("            $('trPaipai').cells[5].innerHTML = '<a href=\"'+ mts[6] + '\" title=\"进入商铺\" target=\"_blank\">' + mts[7] + '</a>';");
194                     sb.Append("            var Paipai_child = $('pp_child');");
195                     sb.Append("            $('trPaipai').className='t_2399997_taobao_extend';");
196                     sb.Append("            $('trPaipai').title='点击这里可以展开或折叠更多的拍拍网搜索结果';");
197                     sb.Append("            $('trPaipai').onclick = function(evt){");
198                     sb.Append("               if($('pp_child').style.display=='none'){$('pp_child').style.display='block';}else{$('pp_child').style.display='none';}");
199                     sb.Append("            };");
200                     sb.Append("            var Paipai_child_td = Paipai_child.insertCell(Paipai_child.cells.length);");
201                     sb.Append("            Paipai_child_td.colSpan=6;");
202                     sb.Append("            Paipai_child_td_table.id = 'Paipai_child_td_table';");
203                     sb.Append("            $app(Paipai_child_td_table,Paipai_child_td);");
204                     sb.Append("         }");
205                     sb.Append("         else{");
206                     sb.Append("             try{");
207                     sb.Append("                var container = Paipai_child_td_table;");
208                     sb.Append("                if(mts && container){");
209                     sb.Append("                    try{");
210                     sb.Append("                       var item = container.insertRow(container.rows.length);");
211                     sb.Append("                    }");
212                     sb.Append("                    catch(e){");
213                     sb.Append("                       alert('列表生成失败!');");
214                     sb.Append("                    }");
215                     sb.Append("                    var item_0 = item.insertCell(item.cells.length);");
216                     sb.Append("                    item_0.innerHTML = '<img src=\"'+ mts[3] +'\"/>';");
217                     sb.Append("                    var item_1 = item.insertCell(item.cells.length);");
218                     sb.Append("                    item_1.innerHTML = '<a href=\"' + mts[1] + '\" target=\"_blank\">' + mts[2] + '</a>';");
219                     sb.Append("                    var item_2 = item.insertCell(item.cells.length);");
220                     sb.Append("                    item_2.innerHTML = mts[5];");
221                     sb.Append("                    var item_3 = item.insertCell(item.cells.length);");
222                     sb.Append("                    item_3.innerHTML = mts[4];");
223                     sb.Append("                    var item_4 = item.insertCell(item.cells.length);");
224                     sb.Append("                    item_4.innerHTML = '<a href=\"'+ mts[6] + '\" title=\"进入商铺\" target=\"_blank\">' + mts[7] + '</a>';");
225                     sb.Append("                }");
226                     sb.Append("             }");
227                     sb.Append("             catch(e){");
228                     sb.Append("                alert(e);");
229                     sb.Append("             }");
230                     sb.Append("         }");
231                     sb.Append("         x++;");
232                     sb.Append("      }");
233                     sb.Append("}");
234                     sb.Append("function proxyEBayItems(obj){");
235                     sb.Append("   var mtsv;");
236                     sb.Append("   var data = obj.responseText.toString();");
237                     sb.Append("   var index = data.indexOf('Location');");
238                     sb.Append("   if(index > 0 && index < 500){");
239                     sb.Append("      var ps = /location[\\s\\S]*?http:\\/\\/([^\\/]*?)\\/([\\s\\S]*?\\.html)/gi;");
240                     sb.Append("      if(mtsv = ps.exec(data)){"); //如果匹配则说明还要转址
241                     sb.Append("         var path = mtsv[2];");//首先需要执行字符串替换
242                     sb.Append("         if(path){");
243                     sb.Append("            path = path.replace(/==--0-2.html/gi,'==-6-0---" + Convert.ToString(int.Parse(price_start)) + "-" + Convert.ToString(int.Parse(price_end)) + "-2.html');");
244                     sb.Append("            path = path.replace(/\\s+?/g,'');");
245                     sb.Append("            sys.behavior.$doAX($('tid').value,mtsv[1],'8080',path,'get','','paipai_proxy','tools/sapi/tool.ashx','','utf-8','proxyEBayItems');");
246                     sb.Append("         }");
247                     sb.Append("      }");
248                     sb.Append("   }");
249                     sb.Append("   else{");
250                     sb.Append("      CreateEBayItems(data);");
251                     sb.Append("   }");
252                     sb.Append("}");
253                     sb.Append("function CreateEBayItems(data){");
254                     sb.Append("      var res = data;");
255                     sb.Append("      var mts;");
256                     sb.Append("      var ebPatten = /<ul>[\\s\\S]*?<img[^>]*?src=\\\"([^\\\"]*?)\\\"[^>]*?>[\\s\\S]*?<h2>\\s*?<a[^>]*?href=\\\"([^\\\"]*?)\\\"[^>]*?>([\\s\\S]*?)<\\/a>\\s*?<\\/h2>[\\s\\S]*?<p>[\\s\\S]*?<a[^>]*?href=\\\"([^\\\"]*?)\\\"[^>]*?>([\\s\\S]*?)<\\/a>[\\s\\S]*?<\\/p>[\\s\\S]*?<li class=\\\"v\\\">[\\s\\S]*?<strong>([^<]*?)<\\/strong>[\\s\\S]*?<\\/li>[\\s\\S]*?<li class=\\\"l\\\">([^<]*?)<\\/li>[\\s\\S]*?<\\/ul>/gi;");
257                     sb.Append("      var x = 0;");
258                     sb.Append("      var ebay_child_td_table = $crt('table');");
259                     sb.Append("      while(mts = ebPatten.exec(res)){");
260                     sb.Append("         if(x == 0){");
261                     sb.Append("            $('trEBay').cells[1].innerHTML = '<img src=\"'+ mts[1] +'\"/>';");
262                     sb.Append("            $('trEBay').cells[2].innerHTML = '<a href=\"' + mts[2] + '\" target=\"_blank\">' + mts[3] + '</a>';");
263                     sb.Append("            $('trEBay').cells[3].innerHTML = mts[6];");
264                     sb.Append("            $('trEBay').cells[4].innerHTML = mts[7];");
265                     sb.Append("            $('trEBay').cells[5].innerHTML = '<a href=\"'+ mts[4] + '\" title=\"进入商铺\" target=\"_blank\">' + mts[5] + '</a>';");
266                     sb.Append("            var ebay_child = $('ebay_child');");
267                     sb.Append("            $('trEBay').className='t_2399997_taobao_extend';");
268                     sb.Append("            $('trEBay').title='点击这里可以展开或折叠更多的易趣网搜索结果';");
269                     sb.Append("            $('trEBay').onclick = function(evt){");
270                     sb.Append("               if($('ebay_child').style.display=='none'){$('ebay_child').style.display='block';}else{$('ebay_child').style.display='none';}");
271                     sb.Append("            };");
272                     sb.Append("            var ebay_child_td = ebay_child.insertCell(ebay_child.cells.length);");
273                     sb.Append("            ebay_child_td.colSpan=6;");
274                     sb.Append("            ebay_child_td_table.id = 'ebay_child_td_table';");
275                     sb.Append("            $app(ebay_child_td_table,ebay_child_td);");
276                     sb.Append("         }");
277                     sb.Append("         else{");
278                     sb.Append("             try{");
279                     sb.Append("                var container = ebay_child_td_table;");
280                     sb.Append("                if(mts && container){");
281                     sb.Append("                    try{");
282                     sb.Append("                       var item = container.insertRow(container.rows.length);");
283                     sb.Append("                    }");
284                     sb.Append("                    catch(e){");
285                     sb.Append("                       alert('列表生成失败!');");
286                     sb.Append("                    }");
287                     sb.Append("                    var item_0 = item.insertCell(item.cells.length);");
288                     sb.Append("                    item_0.innerHTML = '<img src=\"'+ mts[1] +'\"/>';");
289                     sb.Append("                    var item_1 = item.insertCell(item.cells.length);");
290                     sb.Append("                    item_1.innerHTML = '<a href=\"' + mts[2] + '\" target=\"_blank\">' + mts[3] + '</a>';");
291                     sb.Append("                    var item_2 = item.insertCell(item.cells.length);");
292                     sb.Append("                    item_2.innerHTML = mts[6];");
293                     sb.Append("                    var item_3 = item.insertCell(item.cells.length);");
294                     sb.Append("                    item_3.innerHTML = mts[7];");
295                     sb.Append("                    var item_4 = item.insertCell(item.cells.length);");
296                     sb.Append("                    item_4.innerHTML = '<a href=\"'+ mts[4] + '\" title=\"进入商铺\" target=\"_blank\">' + mts[5] + '</a>';");
297                     sb.Append("                }");
298                     sb.Append("             }");
299                     sb.Append("             catch(e){");
300                     sb.Append("                alert(e);");
301                     sb.Append("             }");
302                     sb.Append("         }");
303                     sb.Append("         x++;");
304                     sb.Append("      }");
305                     sb.Append("}");
306                     sb.Append("var key = $('tbxKey').value;");
307                     sb.Append("var price = ($('tbxValue').value == '') ? 'none' : $('tbxValue').value;");
308                     sb.Append("var range = ($('tbxRange').value == '') ? 'none' : $('tbxRange').value;");
309                     sb.Append("var site = ($('cbxTaobao').checked ? '1' : '0') + '|' + ($('cbxPaipai').checked ? '1' : '0') + '|' + ($('cbxDangdang').checked ? '1' : '0') + '|' + ($('cbxJingdong').checked ? '1' : '0') + '|' + ($('cbxZhuoyue').checked ? '1' : '0');");
310                     sb.Append("var para = ($('cbxShowTack').checked ? '1' : '0') + '|' + ($('cbxShowImg').checked ? '1' : '0') + '|' + ($('cbxShowXin').checked ? '1' : '0');");
311                     sb.Append("if($('cbxTaobao').checked){");
312                     DoResources(sb, "taobao_item");
313                     sb.Append("}");
314                     sb.Append("if($('cbxPaipai').checked){");
315                     //create paipai.com proxy;
316                     DoResources(sb, "paipai_item");
317                     sb.Append("}");
318                     sb.Append("if($('cbxJingdong').checked){");
319                     DoResources(sb, "jd_item");
320                     sb.Append("}");
321                     sb.Append("if($('cbxZhuoyue').checked){");
322                     DoResources(sb, "zy_item");
323                     sb.Append("}");
324                     sb.Append("if($('cbxDangdang').checked){");
325                     DoResources(sb, "dd_item");
326                     sb.Append("}");
327                     sb.Append("if($('cbxEBay').checked){");
328                     DoResources(sb, "ebay_item");
329                     sb.Append("}");
330                     sb.Append("</script>");
331                     break;
332             }
333            
334             return sb.ToString();
335         }

 

以上代码是其中一个片段。

3.创建ACTIVEX,继续一端JS脚本。

 

代码
var ZHTools = 
{
    _err : 
false,
    _tsArray : [],
    _getInstance : 
function() {
        
if(this._tsArray.length > 0){
            
for (var y=0;y<this._tsArray.length; y++) {
                
if(this._tsArray[y] && this._tsArray[y].State){
                    
if(this._tsArray[y].State == 0 || this._tsArray[y].State == 4)
                    {
                        
this._tsArray[y] = null;
                        
this._tsArray.splice(y,1);
                        
return this._tsArray[this._tsArray.length] = this._createZHTools();
                    }
                }
            }
        }
        
this._tsArray[this._tsArray.length] = this._createZHTools();
        
if(this._tsArray[this._tsArray.length-1]){
           
return this._tsArray[this._tsArray.length-1];
        }
        
else{
           
return null;
        }
    },
    _createZHTools :  
function () {
        
try{
            
var objTools = new ActiveXObject("ZHDAPS.Tools.2");
            
if(!objTools){
                ZHTools._err 
= true;
                ZHTools._showDownloadMsg();
            }
           
if(objTools.State){
              objTools.State 
= 1;
           }
        }
        
catch(e){
            
//显示ActiveX控件下载
           ZHTools._err = true;
           ZHTools._showDownloadMsg();
        }
        
return objTools;
    },
    _send: 
function (tid,domain,port,path,method,params,flag,refUrl,referer,charset,callback){
        
if(!ZHTools._err){
            
var tools = this._getInstance();
            
if(tools){
                
with(tools)
                {
                    
try
                    {
                        OnDataChanged 
= callback;
                        Send(tid,domain,port,path,method,params,flag,refUrl,referer,charset);
                    }
                    
catch(e)
                    {
                        alert(e);
                    }
                }
            }
        }
    },
    clear : 
function(){
       
for (var y=0;y<this._tsArray.length; y++) {
                
this._tsArray[y].Dispose();
                
this._tsArray[y] = null;
                
this._tsArray.splice(y,1);
        }
    },
    _showDownloadMsg : 
function(){
         
if(confirm('请安装智汇工具插件\n此工具需要ZHSoft 客户端插件支持,您确认要下载吗(此插件是安全的)?')){
             window.location.href 
= "http://www.cnblogs.com/install/ClientDlls.htm";
         }
    }
    
}

 

 

当插件已经被安装的时候开始创建插件并调用,如果没有安装就提示安装。

在插件中需要使用多线程,然后使用IDispatch.Invoke方法调用页面中的JS回调函数。

关于更多的技术细节,将在后面的章节中加入。谢谢阅读。

 

 

posted @ 2010-04-14 14:55  kutasms  阅读(2011)  评论(7)    收藏  举报