注释版show_ads.js

时间:2022-06-13 16:03:42

花了点时间阅读了google的show_ads.js,替换了其中的一些函数 为可理解的函数名,也适当做了些注释,不知道对不对,时间仓促,错误难免,供大家分析,了解其中的原理。

 

// JScript source code
(
function()
{
 function Var2Char(c)   //将值转换为字符串形式 如 7 转换为'7'
 {
  return c!=null?'"'+c+'"':'""'
 }

 function AdjustEscape(c)   //编码函数 这个是如果存在 encodeURIComponent 这个函数,那么就用这个调用来获得URL编码,因为
 { //encodeURIComponent 是支持UTF-8也就是unicode编码的
  if(typeof encodeURIComponent=="function") //
    {return encodeURIComponent(c)}
  else
  {return escape(c)}
 }

 function AppendADUrlParameter(c,a)  //返回google_ad_url的参量对字符串形式,条件是值不为空
 {
  if(a)
  {
   window.google_ad_url+="&"+c+"="+a
  }
 }

 function SafeAppendAdUrl(c,a)   //组合一个值对的安全方法
 {
  if(a){AppendADUrlParameter(c,AdjustEscape(a))}
 }

 function SetColorParameterc,a,b)  //设定颜色对象的值对
 {
  if(a&&typeof a=="object")
  {a=a[b%a.length]}
    AppendADUrlParameter("color_"+c,a)
 }

 function SetLocalEnvironment(c,a)   
 {//b 代表当前某个窗口的屏幕属性 e 代表是否支持javascript f代表时区
  var b=c.screen,e=navigator.javaEnabled(),f=-a.getTimezoneOffset();
  if(b)
  {
   AppendADUrlParameter("u_h",b.height); //设定参量
   AppendADUrlParameter("u_w",b.width);
   AppendADUrlParameter("u_ah",b.availHeight);
   AppendADUrlParameter("u_aw",b.availWidth);
   AppendADUrlParameter("u_cd",b.colorDepth)
  }
  AppendADUrlParameter("u_tz",f);   //设定时区
  AppendADUrlParameter("u_his",history.length); //历史列表长度?这个google需要干什么呢?
  AppendADUrlParameter("u_java",e);
  if(navigator.plugins)
  {
  AppendADUrlParameter("u_nplug",navigator.plugins.length) //设定plug
  }
  if(navigator.mimeTypes)  //设定mime支持类型参数长度
  {
  AppendADUrlParameter("u_nmime",navigator.mimeTypes.length)  
  }
 }

 function SetPerfixca(c)    //增加ca-前缀
 {
  c=c.toLowerCase();  
  if(c.substring(0,3)!="ca-")
  {
   c="ca-"+c
  }
  return c
 }

//V 函数显示js来加载广告
 function ViewGoogleAD(c,a,b,e)  // c 代表广告特定窗口  a 为所在的主窗口 ?
 {
 b=b.substring(0,2000);
 b=b.replace(/%/w?$/,"");
 if(c.google_ad_output=="js"&&(c.google_ad_request_done||c.google_radlink_request_done))
 {//输出方式js
 a.write('<script language="JavaScript1.1" src='+Var2Char(b)+"><//script>")
 }
 else
  if(c.google_ad_output=="html")  //输出方式 html
  {
  if(c.name!="google_ads_frame") //如果不是这个名字就加载一个div中的frame
  {
    if(e!=null){a.write('<div id="'+e+'">')}
    a.write('<iframe name="google_ads_frame" width='+Var2Char(c.google_ad_width)+" height="+Var2Char(c.google_ad_height)+" frameborder="+Var2Char(c.google_ad_frameborder)+" src="+Var2Char(b)+' marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no">');
    a.write("</iframe>");
    if(e!=null)
    {
    a.write("</div>")
    }
  }
  }
         else
    if(c.google_ad_output=="textlink")
  {//输出脚本来显示文字
   a.write('<script language="JavaScript1.1" src='+Var2Char(b)+"><//script>")
  }
 }

 function InitNull(c) //初始化函数,全部赋值null
 {var a=null;
 c.google_ad_frameborder=a;  //广告的帧边框
 c.google_ad_format=a;   //广告格式
 c.google_page_url=a;   //广告页的url
 c.google_language=a;   //语言
 c.google_gl=a;    //?
 c.google_country=a;   //所在国家,因为这个也是问题,涉及到区域、还有宗教等麻烦问题
 c.google_region=a;   //范围
 c.google_city=a;   //所在城市
 c.google_hints=a;   //点击了吗
 c.google_safe=a;   
 c.google_encoding=a;
 c.google_ad_output=a;
 c.google_max_num_ads=a;
 c.google_ad_channel=a;
 c.google_contents=a;
 c.google_alternate_ad_url=a;
 c.google_alternate_color=a;
 c.google_color_bg=a;
 c.google_color_text=a;
 c.google_color_link=a;
 c.google_color_url=a;
 c.google_color_border=a;
 c.google_color_line=a;
 c.google_reuse_colors=a;
 c.google_adtest=a;
 c.google_kw_type=a;
 c.google_kw=a;
 c.google_num_radlinks=a;
 c.google_max_radlink_len=a;
 c.google_rl_filtering=a;
 c.google_rl_mode=a;
 c.google_rt=a;
 c.google_rl_dest_url=a;
 c.google_num_radlinks_per_unit=a;
 c.google_ad_type=a;
 c.google_image_size=a;
 c.google_feedback=a;
 c.google_skip=a;
 c.google_page_location=a;
 c.google_referrer_url=a;
 c.google_ad_region=a;
 c.google_ad_section=a;
 c.google_bid=a;
 c.google_cpa_choice=a;
 c.google_cust_age=a;
 c.google_cust_gender=a;
 c.google_cust_interests=a;
 c.google_cust_id=a;
 c.google_cust_job=a;
 c.google_cust_u_url=a;
 c.google_cust_l=a;
 c.google_cust_lh=a;
 c.google_cust_ch=a;
 c.google_ed=a;
 c.google_targeting=a;
 c.google_ad_host=a;
 c.google_ad_slot=a;
 c.google_ad_override=a;
 c.google_ui_features=a
 }

 function SmartAnalyse(c)
 {
  var a=null,b=window,e=document,f=new Date,g=f.getTime(),h=b.google_ad_format; //h 是广告的尺寸
  if(b.google_cpa_choice) //是CPA方式吗
  {
   b.google_ad_url="http://pagead2.googlesyndication.com/cpa/ads?";
   b.google_ad_url+="client="+escape(SetPerfixca(b.google_ad_client));
   b.google_ad_region="_google_cpa_region_";
   AppendADUrlParameter("cpa_choice",b.google_cpa_choice);
   if(typeof e.characterSet!="undefined")
   {
   SafeAppendAdUrl("oe",e.characterSet) //i函数是组合值对
   }
   else
    if(typeof e.charset!="undefined")
    {
    SafeAppendAdUrl("oe",e.charset)
    }
  }
  else
  {
  b.google_ad_url="http://pagead2.googlesyndication.com/pagead/ads?"; //返回AD
  b.google_ad_url+="client="+escape(SetPerfixca(b.google_ad_client))
  }
  AppendADUrlParameter("host",b.google_ad_host); //加上host=的值对

  var j=b.google_num_slots_by_client,
   C=b.google_num_slots_by_channel,
   l=b.google_prev_ad_formats_by_region;
  if(b.google_ad_region==a&&b.google_ad_section!=a)
  {
  b.google_ad_region=b.google_ad_section
  }
  var k=b.google_ad_region==a?"":b.google_ad_region,w=false; //新增一个w?
  if(h) //如果有尺寸要求,那么需要解析尺寸
  {
  w=h.indexOf("_0ads")>0
  }
  if(w)//如果尺寸存在 就进行解析获得尺寸的行为
  {
   if(b.google_num_0ad_slots) //如果存在广告位 那么增加
   {
    b.google_num_0ad_slots=b.google_num_0ad_slots+1
   }
   else
   {
    b.google_num_0ad_slots=1
   }
   if(b.google_num_0ad_slots>3)  //不可以超过3个,返回吧
   {
    return false
   }
  }
  else
      if(!b.google_cpa_choice) //不是CPA付费方式的广告,那就是按照点击、显示次数来付费
   {
    if(b.google_num_ad_slots)
       {
        b.google_num_ad_slots=b.google_num_ad_slots+1 //多少个广告位都无所谓了
       }
    else
    {
        b.google_num_ad_slots=1
    }
    if(b.google_num_slots_to_rotate)  //点击???
    {
     l[k]=a;  
     if(b.google_num_slot_to_show==a)
     {
      b.google_num_slot_to_show=g%b.google_num_slots_to_rotate+1  //广告轮换显示
     }
     if(b.google_num_slot_to_show!=b.google_num_ad_slots)
     {
      return false
     }
    }
    else
     if(b.google_num_ad_slots>3&&k=="")
     {
      return false
     }
   }
   
  AppendADUrlParameter("dt",f.getTime());  //组合时间
  AppendADUrlParameter("hl",b.google_language); //语言
  if(b.google_country)
  {
   AppendADUrlParameter("gl",b.google_country) //国家代码
  }
  else
  {
   AppendADUrlParameter("gl",b.google_gl)
  }

  AppendADUrlParameter("gr",b.google_region);
  SafeAppendAdUrl("gcs",b.google_city);
  SafeAppendAdUrl("hints",b.google_hints);
  AppendADUrlParameter("adsafe",b.google_safe);
  AppendADUrlParameter("oe",b.google_encoding);
  AppendADUrlParameter("lmt",b.google_last_modified_time);    //这个应该是通知google进行判断是否需要更新AD,因为网页更新了,所以网页内容可能改变了,通过document.lastModify参数获知
  SafeAppendAdUrl("alternate_ad_url",b.google_alternate_ad_url);
  AppendADUrlParameter("alt_color",b.google_alternate_color);   //客户端设置界面的时候设置 google_alternate_color
  AppendADUrlParameter("skip",b.google_skip);
  AppendADUrlParameter("targeting",b.google_targeting);
  //以上组合具体值
  
  var p=b.google_ad_client;  //获得google_ad_client = "pub-9258403919995769"; 这样的值
  
  if(!j[p])      //j 是存放那些client的数组(slot)
  {
   j[p]=1;j.length+=1   //新增一个
  }
  else
  {
   j[p]+=1      //该client的值增加
  }
  if(l[k])      //当前格式
  {
   SafeAppendAdUrl("prev_fmts",l[k].toLowerCase());
   if(j.length>1)
   {
   AppendADUrlParameter("slot",j[p])   //携带google_ad_client的slot数
   }
  }
  
  if(h&&!b.google_ad_slot)  //h是广告尺寸
  {
   SafeAppendAdUrl("format",h.toLowerCase()); //组合格式
   if(l[k])
   {
    l[k]=l[k]+","+h    //确定格式
   }
   else
   {
    l[k]=h     //按照定义的格式显示了
   }
  }
  
  AppendADUrlParameter("num_ads",b.google_max_num_ads);
  AppendADUrlParameter("output",c!=a?c:b.google_ad_output);
  AppendADUrlParameter("adtest",b.google_adtest);
  
  if(b.google_ad_slot)
  {
   AppendADUrlParameter("slotname",b.google_ad_slot)
  }
  
  SafeAppendAdUrl("correlator",b.google_correlator);
  if(b.google_ad_channel)
  {
   var x=b.google_ad_channel;
   SafeAppendAdUrl("channel",x);
   var y="",z=x.split("+");
   for(var s=0;s<z.length;s++)
   {
    var t=z[s];
    if(!C[t])
    {
     C[t]=1}else{y+=t+"+"}
    }
    SafeAppendAdUrl("pv_ch",y)
   }
   
   SafeAppendAdUrl("url",b.google_page_url);
   SetColorParameter"bg",b.google_color_bg,g);
   SetColorParameter"text",b.google_color_text,g);
   SetColorParameter"link",b.google_color_link,g);
   SetColorParameter"url",b.google_color_url,g);
   SetColorParameter"border",b.google_color_border,g);
   SetColorParameter"line",b.google_color_line,g);
   if(b.google_reuse_colors)
    AppendADUrlParameter("reuse_colors",1);
   else
    AppendADUrlParameter("reuse_colors",0);
   
   AppendADUrlParameter("kw_type",b.google_kw_type);
   SafeAppendAdUrl("kw",b.google_kw);
   SafeAppendAdUrl("contents",b.google_contents);
   AppendADUrlParameter("num_radlinks",b.google_num_radlinks);
   AppendADUrlParameter("max_radlink_len",b.google_max_radlink_len);
   AppendADUrlParameter("rl_filtering",b.google_rl_filtering);
   AppendADUrlParameter("rl_mode",b.google_rl_mode);
   AppendADUrlParameter("rt",b.google_rt);
   SafeAppendAdUrl("rl_dest_url",b.google_rl_dest_url);
   AppendADUrlParameter("num_radlinks_per_unit",b.google_num_radlinks_per_unit);
   AppendADUrlParameter("ad_type",b.google_ad_type);
   AppendADUrlParameter("image_size",b.google_image_size);
   AppendADUrlParameter("region",b.google_ad_region);
   AppendADUrlParameter("feedback_link",b.google_feedback);
   SafeAppendAdUrl("ref",b.google_referrer_url);
   SafeAppendAdUrl("loc",b.google_page_location);
   AppendADUrlParameter("bid",b.google_bid);
   AppendADUrlParameter("cust_age",b.google_cust_age);
   AppendADUrlParameter("cust_gender",b.google_cust_gender);
   AppendADUrlParameter("cust_interests",b.google_cust_interests);
   AppendADUrlParameter("cust_id",b.google_cust_id);
   AppendADUrlParameter("cust_job",b.google_cust_job);
   AppendADUrlParameter("cust_u_url",b.google_cust_u_url);
   AppendADUrlParameter("cust_l",b.google_cust_l);
   AppendADUrlParameter("cust_lh",b.google_cust_lh);
   AppendADUrlParameter("cust_ch",b.google_cust_ch);
   AppendADUrlParameter("ed",b.google_ed);
   SafeAppendAdUrl("ui",b.google_ui_features);
   
   if(CompareLocation(b,e)&&e.body)
   {
    var A=e.body.scrollHeight,B=e.body.clientHeight;
    if(B&&A)
    {
     SafeAppendAdUrl("cc",Math.round(B*100/A))
    }
   }
   AppendADUrlParameter("google_ad_override",b.google_ad_override);
   AppendADUrlParameter("flash",b.google_flash_version);
   SetLocalEnvironment(b,f);
   return true;
 }
 // H函数结束

 

 function SmartViewGoogleAD()
 {
  var c=window,a=document,b=false;
  if(IsHTMLFormat(c.google_ad_output,c.google_ad_client)&&!IsSupportDHTML())
  {
   b=true      //广告输出跟客户站点要求的格式 是否匹配?
  }
  var e=b?"json_html":null;
  if(!SmartAnalyse(e))   //分析出广告不成功 就退出
  {
   return
  }
  if(!b)   //不匹配吗
  {
   ViewGoogleAD(c,a,c.google_ad_url,null)  //根据当前window document和广告的ADURL来显示广告
  }
  else
  {
   ScriptViewAD()   //需要再次通过JS来获取往广告服务器回调,此时服务器来回肯定需要时间
  }
  InitNull(c)   //重新设置window的google相关值
 }
 
 function CallBackFunction(c,a,b) //调用G函数 后返回一个T
 {
  SmartViewGoogleAD();
  return true
 }

 function CompareLocation(c,a)
 {
  return c.top.location==a.location //看看当前的window的最上location是否是文档的location一致
 }

 function CheckADArea(c,a)     //检验广告区域是否合法
 {
  var b=a.documentElement;  //返回文档的根元素
  if(CompareLocation(c,a))return false;   //如果当前文档的url同window的最顶层一致 就不用继续了
  if(c.google_ad_width&&c.google_ad_height)
  {
   var e=1,f=1;
   if(c.innerHeight)
   {
    e=c.innerWidth;f=c.innerHeight  //继承父亲的 inner属性
   }
   else
   if(b&&b.clientHeight)
   {
    e=b.clientWidth;f=b.clientHeight
   }
   else
     if(a.body)
     {
    e=a.body.clientWidth;
    f=a.body.clientHeight
     }
      if(f>2*c.google_ad_height||e>2*c.google_ad_width)
      {
    return false //长度不可超过预定义的高宽的2倍啊
   }
  }
  return true
 }

 function ViewADMainFunction(c)  //
 {
  var a=window,b=document,e=b.location,f=b.referrer,g=null,h=a.onerror;
  a.onerror=c;  //出错 去调用 CallBackFunction(),也就是SmartViewGoogleAD()的安全调用方法
  if(a.google_ad_frameborder==g) //对于null值 设定为0
  {
   a.google_ad_frameborder=0  
  }
  if(a.google_ad_output==g)
  { 
   a.google_ad_output="html"
  }
  if(a.google_ad_format==g&&a.google_ad_output=="html")
  {
   a.google_ad_format=a.google_ad_width+"x"+a.google_ad_height //广告格式
  }
  if(a.google_page_url==g)
  {
   a.google_page_url=f;  //reffer作为宿主页
   if(!CheckADArea(a,b))   //广告区域不合法了 那可能是修改了代码 和设置 需要检验文档是否修改过 取 文档的lastModified属性
              {
    a.google_page_url=e;
    a.google_last_modified_time=Date.parse(b.lastModified)/1000;
    a.google_referrer_url=f
              }
       }
       else
    {
  a.google_page_location=f;
  if(!CheckADArea(a,b))
   {a.google_page_location=e}
    }
   
    if(a.google_num_slots_by_channel==g)
  {
  a.google_num_slots_by_channel=[]
  }
 
   if(a.google_num_slots_by_client==g)
  {
  a.google_num_slots_by_client=[]
  }
   if(a.google_prev_ad_formats_by_region==g)
  {
  a.google_prev_ad_formats_by_region=[]
  }
 if(a.google_correlator==g)
 {
 a.google_correlator=(new Date).getTime()
 }
 if(a.google_adslot_loaded==g)
 {a.google_adslot_loaded={}
 }
 if(a.google_adContentsBySlot==g)
 {a.google_adContentsBySlot={}
 }
 if(a.google_flash_version==g)
 {a.google_flash_version=I().toString()
 }
 a.onerror=h   //还原错误处理过程
 }

 function IsIncludeChar(c)  //判断是否包含某个字符串
 {
   if(c in q)
    {
     return q[c]
    }
    return q[c]=navigator.userAgent.toLowerCase().indexOf(c)!=-1
 }
 
 var q={};
 function IsIEorOpers()  //是否是msie 或者 opera浏览器
 {
 return IsIncludeChar("msie")&&!window.opera
 }

 function IsSafari()
 {return IsIncludeChar("safari")}  //是否是 safari 类浏览器
 
 function GetUserAgentVer()    //返回版本号
 {
   var c=navigator.userAgent,a=c.indexOf("MSIE ");
   if(a==-1)
   {return 0}
     else
   {
     return parseFloat(c.substring(a+5,c.indexOf(";",a)))
   }
   }

 function IsSupportDHTML()  //用来判断当前浏览器是否不支持DHTML
 {
   if(IsIEorOpers())
     {var c=GetUserAgentVer();
      return c<=5
     }
   else if(IsIncludeChar("firefox"))
  {
  var a=navigator.userAgent.indexOf("Firefox")+8,b=parseInt(navigator.userAgent.charAt(a)),e=navigator.userAgent.slice(a);
  return b<1
  }
  else if(IsSafari())
        {
   var a=navigator.userAgent.indexOf("Safari")+7,e=navigator.userAgent.slice(a),f=parseInt(e);
   return f<412
        }
       else if(window.opera!=null)
   {
     var a=navigator.userAgent.indexOf("Opera")+6,e=navigator.userAgent.slice(a),b=parseInt(e);
     return b<9
                        }
                        else if(!IsIEorOpers()&&!IsSafari()&&IsIncludeChar("mozilla"))
                            {
    var a=navigator.userAgent.indexOf("Netscape")+9,e=navigator.userAgent.slice(a),b=parseInt(e);
    return b<7
       }
       else
       {return true}
 }

 function IsHTMLFormat(c,a)
 {
   if(c!="html")   //如果输出格式不是html那么 返回false
     {return false}
   var b={};
   b["ca-pub-8954402009499768"]=true; //当前数组赋值 ?
   return b[a]!=null      //实际上这个函数判断 a 是不是请求的 ca-pub-8954402009499768
    }
  
 function ScriptViewAD()       //回调函数,表示当前广告需要调用js来实现
 {var c=window;AppendADUrlParameter("impl","s");
  AppendADUrlParameter("callback","_google_setAdContentsBySlotForSync");
  document.write("<script src = '"+c.google_ad_url+"'><//script>") //再次调用js进行获取广告资源
 }

 window.google_createDivWithContent=function(c)   //按照div方式来生成广告?
 {var a=window,b="google_ads_div_"+c,e="<div id="+b+">",f=a.google_adContentsBySlot[c]; //此处存放了div的广告html代码
  if(f==null)
   {return}
  e+=f._html_;
  e+="/n</div>/n";
  document.write(e)
 };

 window.google_createDOMIframe=function(c,a,b,e)
 {
  var f=document.getElementsByTagName("script"), //取得全部script的集合
  g=f[f.length-1],        //g为最后一个,实际上就是当前script
  h=document.createElement("iframe");   //创建一个iframe
  h.id="google_ads_iframe_"+c;     //iframe name
  h.width=a;          //宽
  h.height=b;         //高
  h.vspace=0;         //边际都为0
  h.hspace=0;
  h.allowTransparency="true";     //包含 容器的属性
  h.scrolling="no";        
  h.marginWidth=0;
  h.marginHeight=0;
  h.frameBorder=0;
  h.style.border=0;
  g.parentNode.appendChild(h);     //获取当前script的夫元素然后加入创建的iframe
  h.contentWindow.document.write(e);    //输出正文内容
  h.contentWindow.document.close()    //关闭
 };

 window.google_createiframe=function(c,a,b,e,f) //按照动态脚本的方式创建一个iframe
 {
  var g="google_ads_div_"+c,h="google_ads_iframe_"+c,j="<div id="+g+">";
  j+="<iframe id="+h+' width="'+e+'" height="'+f+'" vspace="0" hspace="0" allowtransparency="true" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" style="border:0px;" src="'+a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(//"/g,"&quot;")+'"';
  j+=' onload="'+b+'"';j+="></iframe></div>";
 document.write(j)
 };
 
 var v="google_ads_iframe_".length;   //名字的长度
 
 function M(c)        //获得一个元素的id,然后返回该元素ID去掉 google_ads_iframe_ 后的ID
 {
  var a=c.getAttribute("id"),   
  b=a.substr(v,a.length-v);
  return b
 }

 window._google_syncAdSlotLoaded=function(c)
 {var a=M(c);   //??多余?
  window.google_loadiframe(c)   //?
 };

 window._google_setAdContentsBySlotForSync=function(c) //定义回调函数,回调函数是帧 同宿主页的交互途径
 {
  var a=window;
  for(var b in c)
  {
   var e=c[b];
   a.google_adContentsBySlot[b]=e;
   if(e==null||e._empty_)
   {}
   else
    if(e._expandable_)
    {
     a.google_createDivWithContent(b)
    }
    else
    {
     if(navigator.userAgent.indexOf("MSIE ")>0)
     {
      a.google_adslot_loaded[b]=false;
      var f="window._google_syncAdSlotLoaded(this);";
      a.google_createiframe(b,"about:blank",f,e._width_,e._height_)
     }
     else
     {
      a.google_createDOMIframe(b,e._width_,e._height_,e._html_)
     }
    }
  }
 };

 function GetQueryStringNameValues(c)  //输入一个网址,获得网址的查询字符串位置的值对数组
 {
   var a={},b=c.split("?"),e=b[b.length-1].split("&"); //e获得参数中的值对
   for(var f=0;f<e.length;f++)
   {
  var g=e[f].split("=");
  if(g[0])
      {
   try
   {
   a[g[0].toLowerCase()]=g.length>1?(window.decodeURIComponent?decodeURIComponent(g[1].replace(//+/g," ")):unescape(g[1])):""
   }
   catch(h)
   {}
      }
   }
   return a
 }

 function SetADOverrivdeValue()  //将当前文档的值对值 google_ad_override 覆盖 当前窗口的值
 {
  var c=window,a=GetQueryStringNameValues(document.URL);   
  if(a["google_ad_override"])     //如果存在 google_ad_override 属性,那么继承该属性到当前窗口
    {c.google_ad_override=a["google_ad_override"]}
    }

 function I()         //函数返回当前浏览器的版本信息i
 { var c=0;
   if(navigator.plugins&&navigator.mimeTypes.length) //查看plugins是否存在
   {
  var a=navigator.plugins["Shockwave Flash"];
  if(a&&a.description)
     {
   c=a.description.replace(/([a-zA-Z]|/s)+/,"").split(".")[0]   // c 获得版本
     }
   }
   else
     if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0)
     {
   c=3;var b=1;
   while(b)
                 {
     try
     {
      b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+(c+1));
      c++
     }
     catch(e)
                    {
      b=null
     }
     }
  }
  else
    if(IsIEorOpers())
    {
      try
      {
    var b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")
      }
      catch(e)
      {
     try
     {
        var b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
         c=6;b.AllowScriptAccess="always"
     }
     catch(e)
     {
       if(c==6)
    {return c}
              }
              try
              {
      b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")
     }
              catch(e)
              {}
            }
      if(b!=null)
      {
     c=b.GetVariable("$version").split(" ")[1].split(",")[0]
      }
         }
   return c   //返回插件的版本 看是否支持相关特性
 }
    // I 函数结束

 SetADOverrivdeValue();  //覆盖值对
 ViewADMainFunction(CallBackFunction);  //把K函数作为参数 传递给P函数
 SmartViewGoogleAD();
}
)
()