百度客户端分析之bdsug.js部分(原创部分)

document.write('<script src=http://www.baidu.com/js/bdsug.js?v=1.0.3.0><\/script>')};

 

 

ExpandedBlockStart.gif 代码
  1  // H J O M P F N K
  2 
  3  // I E T R A Q D B
  4 
  5  ( function () {
  6       // 浏览器类型
  7       var  L  =  navigator.userAgent.indexOf( " MSIE " !=   - 1   &&   ! window.opera;
  8       // 当前浏览器采用的渲染方式
  9       var  S  =  (document.compatMode  ==   " BackCompat " );     // 用来判断当前浏览器采用的渲染方式。BackCompat:标准兼容模式关闭。CSS1Compat:标准兼容模式开启。
 10       // 获得元素
 11       function  H(C) {
 12           return  document.getElementById(C)
 13      }
 14       // 创建元素
 15       function  J(C) {
 16           return  document.createElement(C)
 17      }
 18       // 向元素添加事件相应函数
 19       function  O(G, U, C) {
 20           if  (L) {
 21              G.attachEvent( " on "   +  U, ( function (V) {  return   function () { C.call(V) } })(G))
 22          }
 23           else  {
 24              G.addEventListener(U, C,  false )
 25          }
 26      }
 27       // 终止事件冒泡
 28       function  M(C) {
 29           if  (L) {
 30              C.returnValue  =   false
 31          }
 32           else  {
 33              C.preventDefault()
 34          }
 35      }
 36       // 向<style>标签样式表中添加样式
 37       function  P(C, U) {
 38           var  V  =  document.styleSheets;
 39           if  ( ! ||  V.length  <=   0 ) {
 40               var  G  =  document.createElement( " STYLE " ); G.type  =   " text/css " var  W  =  document.getElementsByTagName( " HEAD " )[ 0 ]; W.appendChild(G)
 41          }
 42          V  =  document.styleSheets;
 43          V  =  V[V.length  -   1 ];
 44           if  (L) {
 45              V.addRule(C, U)
 46          }
 47           else  {
 48              V.insertRule(C  +   "  {  "   +  U  +   "  } " , V.cssRules.length)
 49          }
 50      }
 51 
 52       function  F(G) {
 53           var  U  =  document.forms[ 0 ];
 54           for  ( var  V  in  G) {
 55               if  ( ! N(V)) {
 56                  U.appendChild(C(V, G[V]))
 57              }
 58               else  {
 59                  N(V).value  =  G[V]
 60              }
 61          }
 62           function  C(W, Y) {
 63               var  X  =  J( " INPUT " );
 64              X.type  =   " hidden " ;
 65              X.name  =  W;
 66              X.id  =   " bdsug_ipt_ "   +  W; X.value  =  Y;
 67               return  X
 68          }
 69      }
 70 
 71       function  N(V) {
 72           var  U  =  document.forms[ 0 ];
 73           var  G  =   false ;
 74           var  C  =  U.getElementsByTagName( " INPUT " );
 75           for  ( var  W  =   0 ; W  <  C.length; W ++ ) {
 76               if  (V  ==  C[W].getAttribute( " name " )) {
 77                  G  =  C[W];
 78                   return  G
 79              }
 80               else  {
 81                  G  =   false
 82              }
 83          }
 84      }
 85 
 86       function  K(G) {
 87           var  U  =  document.forms[ 0 ];
 88           for  ( var  C  in  G) {
 89               if  (C  ==   " f " ) {
 90                   if  (N( " f " )) {
 91                       if  (N( " f " ).id  ==   " bdsug_ipt_f " ) {
 92                          U.removeChild(H( " bdsug_ipt_f " ))
 93                      }
 94                       else  {
 95                          N( " f " ).value  =   " 8 "
 96                      }
 97                  }
 98              }
 99               else  {
100                   if  (H( " bdsug_ipt_ "   +  C)) {
101                      U.removeChild(H( " bdsug_ipt_ "   +  C))
102                  }
103              }
104          }
105      }
106 
107       // baidu对象
108       if  ( typeof  window.baidu  !=   " object "   ||  window.baidu  ==   null ) {
109          window.baidu  =  {}
110      }
111       // 百度suggestion对象
112      baidu.sug  =  {};
113       // 百度suggestion监控对象
114      baidu.sugkeywatcher  =  {};
115 
116       // 动作处理类模型
117       var  I  =  ( function () {
118           // 将额外的参数压入__MSG_QS__[Y]
119           function  C(Y) {
120               var  W  =   this .__MSG_QS__;
121               if  ( ! W[Y]) {
122                  W[Y]  =  []
123              }
124               for  ( var  X  =   1 , U  =  arguments.length, V; X  <  U; X ++ ) {
125                  W[Y].push(arguments[X])
126              }
127          }
128 
129           function  G(V) {
130               var  W  =   this .__MSG_QS__[V.type];
131               if  (W  ==   null ) {  return  }
132               for  ( var  X  =   0 , U  =  W.length; X  <  U; X ++ ) {
133                  W[X].rm(V)
134              }
135          }
136 
137           return  { ini:  function (U) {
138               // 空对象,一个数组
139              U.__MSG_QS__  =  {};
140              U.on  =  C;
141              U.dm  =  G;
142               return  U
143          }
144          }
145      })();
146       // 百度suggestion管理(input部分)
147       var  E  =  ( function () {
148           // 关键字input
149           var  W  =  H( " kw " );
150           var  C;
151           // setInterval的timer id (function G)
152           var  g  =   0 ;
153           var  e  =   0 ;
154           // 关键字input 的value
155           var  U  =   "" ;
156           var  b  =   "" ;
157           var  f;
158           var  Z  =   false ;
159           var  X  =   true ;
160 
161           function  h() {
162               if  (X) { E.dm({ type:  " start "  }); X  =   false  }
163          }
164 
165           function  c(j) {
166               if  (X) {
167                  E.dm({ type:  " start "  }); X  =   false
168              } j  =  j  ||  window.event;
169               if  (j.keyCode  ==   9   ||  j.keyCode  ==   27 ) { E.dm({ type:  " hide_div "  }) }
170               if  (j.keyCode  ==   13 ) { M(j); E.dm({ type:  " key_enter "  }) }
171               if  (C.style.display  !=   " none " ) {
172                   if  (j.keyCode  ==   38 ) { M(j); E.dm({ type:  " key_up "  }) }
173                   if  (j.keyCode  ==   40 ) {
174                      E.dm({ type:  " key_down "  })
175                  }
176              }
177               else  {
178                   if  (j.keyCode  ==   38   ||  j.keyCode  ==   40 ) {
179                      E.dm({ type:  " need_data " , wd: W.value })
180                  }
181              }
182          }
183           function  G() {
184               var  j  =  W.value;
185               if  (j  ==  U  &&  j  !=   ""   &&  j  !=  b  &&  j  !=  f) {
186                   if  (e  ==   0 ) {
187                      e  =  setTimeout( function () {
188                          E.dm({ type:  " need_data " , wd: j })
189                      },  100 )
190                  }
191              }
192               else  {
193                  clearTimeout(e);
194                  e  =   0 ;
195                  U  =  j;
196                   if  (j  ==   "" ) { E.dm({ type:  " hide_div "  }) }
197                   if  (b  !=  W.value) { b  =   ""  }
198              }
199          }
200           // 打开定时器并保存句柄
201           function  i() {
202              g  =  setInterval(G,  10 )
203          }
204           // 关闭定时器
205           function  Y() {
206              clearInterval(g)
207          }
208           // 取消事件冒泡
209           function  a() {
210               if  (Z) { window.event.cancelBubble  =   true ; window.event.returnValue  =   false ; Z  =   false  }
211          }
212           // 关键字input 的autocomplete属性
213           function  V(j) {
214              W.blur(); W.setAttribute( " autocomplete " , j); W.focus()
215          }
216          W.setAttribute( " autocomplete " " off " );
217           var  d  =   false ;
218           // 绑定搜索input onkeydown/keydown事件绑定(键盘按下)
219          baidu.sugkeywatcher.on  =   function () {
220               if  ( ! d) {
221                   if  (L) {
222                      W.attachEvent( " onkeydown " , c)
223                  }
224                   else  {
225                      W.addEventListener( " keydown " , c,  false )
226                  }
227                  d  =   true
228              }
229          };
230           // 取消绑定搜索input onkeydown/keydown事件绑定(键盘按下)
231          baidu.sugkeywatcher.off  =   function () {
232               if  (d) {
233                   if  (L) { W.detachEvent( " onkeydown " , c) }  else  {
234                      W.removeEventListener( " keydown " , c,  false )
235                  }
236                  d  =   false
237              }
238          };
239          baidu.sugkeywatcher.on();
240           // 绑定搜索input onmousedown事件(鼠标按下)
241          O(W,  " mousedown " , h);
242           // 绑定搜索input onbeforedeactivate事件(失去焦点,另一个元素的onfocus之前。)(onblur是在另一个元素onfocus之后)
243          O(W,  " beforedeactivate " , a);
244 
245           return  I.ini({ rm:  function (j) {
246               switch  (j.type) {
247                   case   " div_ready " : C  =  j.sdiv; b  =  W.value; i();  break ;
248                   case   " clk_submit " : Y(); W.blur(); W.value  =  j.wd;  break ;
249                   case   " ent_submit " : Y(); W.blur();  break ;
250                   case   " key_select " : f  =  j.selected;  break ;
251                   case   " close " : Y(); V( " on " );  break ;
252                   case   " mousedown_tr " : Z  =   true break
253              }
254          }
255          })
256      })();
257       // 百度suggestion管理(table部分)
258       var  T  =  ( function () {
259           var  e;
260           var  X  =  H( " kw " );
261           var  i;
262           var  a  =   - 1 ;
263           var  C;
264           var  j;
265           var  l;
266           // 设置百度suggestion 列表tr未选中样式
267           function  k() {
268               var  m  =  i.rows;
269               for  ( var  U  =   0 ; U  <  m.length; U ++ ) {
270                  m[U].className  =   " ml "
271              }
272          }
273           function  b() {
274               if  ( typeof  (i)  !=   " undefined "   &&  i  !=   null   &&  e.style.display  !=   " none " ) {
275                   var  m  =  i.rows;
276                   for  ( var  U  =   0 ; U  <  m.length; U ++ ) {
277                       if  (m[U].className  ==   " mo " ) {
278                           return  [U, m[U].cells[ 0 ].innerHTML]
279                      }
280                  }
281              }
282               return  [ - 1 "" ]
283          }
284           function  f() {
285               if  (L) {
286                  l.style.display  =   " none "
287              }
288              e.style.display  =   " none "
289          }
290           // 设置百度suggestion 列表tr选中样式(鼠标经过)
291           function  G() {
292              k();  this .className  =   " mo "
293          }
294           function  Y(U) {
295              T.dm({ type:  " mousedown_tr "  });
296               if  ( ! L) {
297                  U.stopPropagation(); U.preventDefault();  return   false
298              }
299          }
300           function  Z(U) {
301               var  m  =  U;
302               return   function () {
303                   var  n  =  C[m];
304                  f();
305                  T.dm({ type:  " clk_submit " , oq: H( " kw " ).value, wd: n, rsp: m })
306              }
307          }
308           function  c(U) {
309              U  =  U  ||  window.event;
310              M(U);
311              T.dm({ type:  " close "  });
312              f();
313               // !!!
314              ( new  Image()).src  =   " http://s.baidu.com/w.gif?fm=suggestion&title=%B9%D8%B1%D5&t= "   +   new  Date().getTime()
315          }
316           // 百度suggestion table 布局
317           function  V() {
318               var  U  =  [X.offsetWidth, X.offsetHeight];
319              e.style.width  =  ((L  &&  S)  ?  U[ 0 ] : U[ 0 -   2 +   " px " ;
320              e.style.top  =  ((L  &&  S)  ?  U[ 1 ] : U[ 1 -   1 +   " px " ;
321              e.style.display  =   " block " ;
322               if  (L) {
323                  l.style.top  =  ((L  &&  S)  ?  U[ 1 ] : U[ 1 -   1 +   " px " ;
324                  l.style.width  =  ((L  &&  S)  ?  U[ 0 ] : U[ 0 -   2 +   " px "
325              }
326          }
327           // 绑定百度suggestion table事件处理
328           function  g() {
329              i  =  J( " TABLE " );
330              i.id  =   " st " ;
331              i.cellSpacing  =   0 ;
332              i.cellPadding  =   2 ;
333               var  p  =  J( " tbody " );
334              i.appendChild(p);
335               for  ( var  U  =   0 , m  =  C.length; U  <  m; U ++ ) {
336                   var  o  =  p.insertRow( - 1 );
337                  O(o,  " mouseover " , G);
338                  O(o,  " mouseout " , k);
339                  O(o,  " mousedown " , Y);
340                  O(o,  " click " , Z(U));
341                   var  n  =  o.insertCell( - 1 );
342                  n.innerHTML  =  C[U].replace( / & / g,  " &amp; " )
343              }
344              e.innerHTML  =   "" ;
345              e.appendChild(i);
346              V();
347               if  (L) {
348                  l.style.display  =   " block " ;
349                  l.style.left  =   0   +   " px " ;
350                  l.style.top  =  X.offsetHeight  +   " px " ;
351                  l.style.width  =  X.offsetWidth  +   " px " ;
352                  l.style.height  =  e.offsetHeight  -   10   +   " px "
353              }
354          }
355           // 回车键按下事件处理
356           function  W() {
357              a  =  b()[ 0 ];
358               if  (a  ==   - 1 ) {
359                  T.dm({ type:  " submit "  })
360              }
361               else  {
362                  T.dm({ type:  " ent_submit " , oq: j, wd: b()[ 1 ], rsp: a })
363              }
364          }
365           // 上箭头键按下事件处理
366           function  h() {
367              a  =  b()[ 0 ];
368              k();
369               if  (a  ==   0 ) {
370                  T.dm({ type:  " key_select " , selected:  ""  });
371                  H( " kw " ).value  =  j; a -- ;
372                  K({ oq: j, sug: C[a], n:  1 , rsp: a, f:  3  })
373              }
374               else  {
375                   if  (a  ==   - 1 ) {
376                      a  =  C.length
377                  }
378                  a -- ;
379                   var  U  =  i.rows[a];
380                  U.className  =   " mo " ;
381                  T.dm({ type:  " key_select " , selected: C[a] });
382                  H( " kw " ).value  =  C[a];
383                  F({ oq: j, sug: C[a], n:  1 , rsp: a, f:  3  })
384              }
385          }
386           // 下箭头键按下事件处理
387           function  d() {
388              a  =  b()[ 0 ];
389              k();
390               if  (a  ==  C.length  -   1 ) {
391                  T.dm({ type:  " key_select " , selected:  ""  });
392                  H( " kw " ).value  =  j;
393                  a  =   - 1 ; K({ oq: j, sug: C[a], n:  1 , rsp: a, f:  3  })
394              }
395               else  {
396                  a ++ var  U  =  i.rows[a]; U.className  =   " mo " ;
397                  T.dm({ type:  " key_select " , selected: C[a] });
398                  H( " kw " ).value  =  C[a];
399                  F({ oq: j, sug: C[a], n:  1 , rsp: a, f:  3  })
400              }
401          }
402           return  I.ini({ rm:  function (U) {
403               switch  (U.type) {
404                   case   " div_ready " : e  =  U.sdiv; l  =  U.frm;  break ;
405                   case   " give_data " : j  =  U.data.q; C  =  U.data.s;  if  (C.length  !=   0 ) { g() }  else  { f() }  break ;
406                   case   " key_enter " : W();  break
407                   case   " key_up " : h();  break ;
408                   case   " key_down " : d();  break
409                   case   " hide_div " : f();  break ;
410                   case   " mousedown_other " : f();  break ;
411                   case   " window_blur " : f();  break
412                   case   " need_resize " : V();  break
413              }
414          }
415          }
416          )
417      })();
418       // subbmit事件管理
419       var  R  =  ( function () {
420           var  C  =  document.forms[ 0 ];
421           // form提交事件处理函数
422           function  G() {
423               if  (H( " bdsug_ipt_sug " )) {
424                   if  (H( " bdsug_ipt_sug " ).value  ==  H( " kw " ).value) {
425                      K({ n:  1 , sug:  1  })
426                  }
427                   else  {
428                      K({ f:  1  })
429                  }
430              }
431          }
432           // form提交事件处理
433          O(C,  " submit " , G);
434 
435           function  U() {
436              G();
437              C.submit()
438          }
439           function  V(W) {
440              F(W);
441              K({ sug:  1 , n:  1  });
442              C.submit()
443          }
444 
445           return  I.ini({ rm:  function (W) {
446               switch  (W.type) {
447                   case   " clk_submit " :
448                   case   " ent_submit " : V({ oq: W.oq, rsp: W.rsp, f:  3  });  break ;
449                   case   " submit " : U();  break
450              }
451          }
452          })
453      })();
454       // 百度suggestion ajax数据管理
455       var  A  =  ( function () {
456           var  G  =  {};
457           function  U(C) {
458               if  ( typeof  G[C]  ==   " undefined " ) {
459                  A.dm({ type:  " request_data " , wd: C })
460              }  else  {
461                  A.dm({ type:  " give_data " , data: G[C] })
462              }
463          }
464           function  V(C) {
465              G[C.q]  =  C;
466              A.dm({ type:  " give_data " , data: G[C.q] })
467          }
468           return  I.ini({ rm:  function (C) {
469               switch  (C.type) {
470                   case   " response_data " : V(C.data);  break ;
471                   case   " need_data " : U(C.wd);  break
472              }
473          }
474          })
475      })();
476 
477       // baidu suggestion查询管理
478       var  Q  =  ( function () {
479           var  C;
480           var  U;
481           // ajax方法,根据关键字获取baidu suggestion内容,
482           // 一个示例:
483           // http://suggestion.baidu.com/su?wd=%E7%9A%84&p=3&t=1274410201491
484           // window.baidu.sug({q:"的",p:false,s:["的卢","的士高","的士速递","的卢马","的士高舞曲","的士高 野人疯狂版","的 地 得的用法","的繁体字怎么写","的士高舞曲视频","的士速递1"]});
485           function  G(V) {
486              Q.dm({ type:  " need_cookie "  });
487               if  (C) {
488                  document.body.removeChild(C)
489              }
490              C  =  J( " SCRIPT " );
491               // !!!
492              C.src  =   " http://suggestion.baidu.com/su?wd= "   +  encodeURIComponent(V)  +   " &p= "   +  U  +   " &t= "   +  ( new  Date()).getTime();
493              C.charset  =   " gb2312 " ;
494              document.body.appendChild(C)
495          }
496           return  I.ini({ rm:  function (V) {
497               switch  (V.type) {
498                   case   " request_data " : G(V.wd);  break ;
499                   case   " give_cookie " var  W  =  V.sug;  if  (W  >   0 ) { W  =   3  } U  =  W;  break
500              }
501          }
502          })
503      })();
504 
505      baidu.sug  =   function (C) { baidu.dm({ type:  " response_data " , data: C }) };
506      baidu.initSug  =   function () { baidu.dm({ type:  " init "  }) };
507      I.ini(baidu);
508 
509       // cookie管理
510       var  D  =  ( function () {
511           function  C() {
512               if  (navigator.cookieEnabled) {
513                  document.cookie  =   " su=0; domain=www.baidu.com "
514              }
515          }
516           function  G() {
517               var  U  =  (navigator.cookieEnabled  &&   / sug=(\d) / .test(document.cookie)  ?  RegExp.$ 1  :  3 );
518              D.dm({ type:  " give_cookie " , sug: U })
519          }
520           return  I.ini({ rm:  function (U) {
521               switch  (U.type) {
522                   case   " close " : C();  break ;
523                   case   " need_cookie " : G();  break
524              }
525          }
526          })
527      })();
528       // 百度suggestion 显示管理
529       var  B  =  ( function () {
530           // input id=kw name=wd
531           var  W  =  H( " kw " );
532           // div id=sd_1274332392357
533           var  C;
534           // Form
535           var  Z  =  document.forms[ 0 ];
536           //
537           var  V;
538           //
539           function  X() {
540               if  (C.offsetWidth  !=   0   &&  W.offsetWidth  !=  C.offsetWidth) {
541                  B.dm({ type:  " need_resize "  })
542              }
543          }
544           // 插入iframe
545           function  a() {
546              C  =  J( " DIV " );
547              C.id  =   " sd_ "   +   new  Date().getTime();
548              C.style.display  =   " none " ;
549              Z.appendChild(C);
550               if  (L) {
551                  V  =  J( " IFRAME " ); V.style.display  =   " none " ; V.style.position  =   " absolute " ;
552                  C.parentNode.insertBefore(V, C)
553              }
554          }
555           function  Y(b) {
556              b  =  b  ||  window.event;
557               var  c  =  b.target  ||  b.srcElement;
558               if  (c  ==  W) {  return  }
559               while  (c  =  c.parentNode) {
560                   if  (c  ==  C) {  return  }
561              }
562              B.dm({ type:  " mousedown_other "  })
563          }
564           function  U() {
565              B.dm({ type:  " window_blur "  })
566          }
567           //
568           function  G() {
569              B.dm({ type:  " div_ready " , sdiv: C, frm: V });
570               // 页面onmousedown事件处理程序
571              setInterval(X,  100 ); O(document,  " mousedown " , Y);
572               // 窗口onblur事件处理程序
573              O(window,  " blur " , U);
574               // 以下代码动态添加<style>标签的内容
575               // C.id <DIV style="DISPLAY: none" id="sd_1274422507294"> 其中sd_1274422507294中的数字是new Date().getTime();
576              P( " # "   +  C.id,  " border:1px solid #817F82;position:absolute;top:28px;left:0 " );
577              P( " # "   +  C.id  +   "  table " " width:100%;background:#fff;cursor:default " );
578              P( " # "   +  C.id  +   "  td " " font:14px verdana " );
579               //
580              P( " .mo " " background-color:#36c;color:#fff " );
581              P( " .ml " " background-color:#fff;color:#000 " )
582          }
583          baidu.sug.initial  =  G;
584           return  I.ini({ rm:  function (b) {
585               switch  (b.type) {
586                   case   " start " : G();  break ;
587                   case   " init " : a();  break
588              }
589          }
590          })
591      })();
592 
593      E.on( " need_data " , A);
594      E.on( " close_div " , T);
595      E.on( " key_enter " , T);
596      E.on( " key_up " , T);
597      E.on( " key_down " , T);
598      E.on( " hide_div " , T);
599      E.on( " start " , B);
600      A.on( " request_data " , Q);
601      A.on( " give_data " , T);
602 
603      baidu.on( " response_data " , A);
604      baidu.on( " init " , B);
605 
606      T.on( " clk_submit " , E, R);
607      T.on( " ent_submit " , E, R);
608      T.on( " submit " , R);
609      T.on( " key_select " , E);
610      T.on( " close " , E, D);
611      T.on( " mousedown_tr " , E);
612      B.on( " mousedown_other " , T);
613      B.on( " need_resize " , T);
614      B.on( " div_ready " , E, T);
615      B.on( " window_blur " , T);
616      Q.on( " need_cookie " , D);
617      D.on( " give_cookie " , Q);
618      window.baidu.initSug()
619  })();
620 

 

 

转载于:https://www.cnblogs.com/smblog/archive/2010/05/21/1740908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值