Google投放广告的js的分析
作者:hqlulu 来源:经典论坛 发布时间:2008-07-15 11:34:00
大家平时见到google的广告太多了,但有没有兴趣知道一下它的运行过程呢?
下面我们一起来看看这个广告代码的执行过程,以及其中的一些精彩内容。
阿权(hqlulu)平时也会投放google的广告,不过帐户还是$0.00,呵呵。
今天特意想研究一下它的运行过程,来给大家分享一下。
我们先看看下面的代码,是通过google的设置得到的:
<script type="text/javascript"><!--
google_ad_client = "pub-2063594891864588";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel = "";
google_color_border = "E6E6E6";
google_color_bg = "E6E6E6";
google_color_link = "000000";
google_color_text = "333333";
google_color_url = "666666";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
明显,先设置一些参数,再调用该js文件,完成广告的投放。
下面把show_ads.js下载回来,我们分析一下:
首先就让我惊讶的是,文件里面首先就是一个这样的结构:
(function(){……})()
我特意发贴问了一下,谢谢mozart0给了他的看法,再次总结一下:
首先,从最后一个括号看出来,这个是调用一个对象,而这个对象就是 function(){……} 建立后返回的;
mozart0说:“直观的好处是把几条需要顺序执行的语句组织成一个单元,使逻辑清晰,又不用为它取名字,可能出于节约的考虑:该匿名函数像一个临时变量,执行后可以被立即销毁,当然连同其中的局部变量”
总体而言,就是建立了一个对象,并且执行它,同时,销毁了一切,一定程度实现了对对象的保护和保密
(A)() 执行效果:先定义A对象,然后执行A对象,执行完毕,A对象就被销毁了
这个是一个不错的方法,值得大家学习借鉴。
好了,我们看看“……”里面的代码,看完一遍就知道它是做了什么。
我整理了一下,按层次结构排列好(这个过程花费的时间也不少呢),没有修改里面的代码,只是加了注释和层次关系的整理。
大体执行过程为:
01 定义字符串操作函数,往URL后添加各种参数 c(b,a) 等
02 定义收集用户端信息的函数 function D(b,a)
03 定义输出广告代码的函数function G(b,a,d)
04 定义对象重置的函数function F(b)
05 定义添加各种参数到URL的函数function A()
06 定义屏幕信息检测函数function x(b,a)
07 定义页面初始化函数function E()
08 运行初始化函数
09 处理应该带上的参数
10 收集客户端信息
11 按指定的方式输出广告代码
12 对象重置
可能因为技术上的问题,这段js代码里面的函数名称都是很奇怪的,为了增加用户查看的难度吧?在这里仅列举几个函数,其余见后面附上的完整代码
1 往URL上添加参数
//如果值存在,则在广告链接后面加上参数
function c(b,a){
if(a){
window.google_ad_url+="&"+b+"="+a
}
}
2 取得客户端信息
//取得浏览器的参数 [执行步骤:03]
//这个是属于用户调查啦,也没收集多少隐私吧,呵呵
function D(b,a){
var d=b.screen,g=navigator.javaEnabled(),e=-a.getTimezoneOffset();
//用户浏览器属性
if(d){
c("u_h",d.height);
c("u_w",d.width);
c("u_ah",d.availHeight);
c("u_aw",d.availWidth);
c("u_cd",d.colorDepth)
}
//用户时区
c("u_tz",e);
//用户历史记录长度
c("u_his",history.length);
//用户浏览器对java的设置
c("u_java",g);
//用户plugins长度
if(navigator.plugins){
c("u_nplug",navigator.plugins.length)
}
//用户mimeTypes长度
if(navigator.mimeTypes){
c("u_nmime",navigator.mimeTypes.length)
}
}
3 输出广告代码
//输出广告代码到页面中 [执行步骤:04]
function G(b,a,d){
d=d.substring(0,1000);
//用正则表达式去掉末尾的 %+单个字符
d=d.replace(/%\w?$/,"");
//按不同的广告类型,输出广告代码
//m函数是给数值两边加上引号
if(b.google_ad_output=="js"&&(b.google_ad_request_done||b.google_radlink_request_done)){
//把广告代码的地址输出,加载该文件
a.write('<script language="JavaScript1.1" src='+m(d)+"><\/script>")
}else if(b.google_ad_output=="html"){
if(b.name!="google_ads_frame"){
a.write('<iframe name="google_ads_frame" width='+m(b.google_ad_width)+" height="+m(b.google_ad_height)+" frameborder="+m(b.google_ad_frameborder)+" src="+m(d)+' marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no">');
a.write("</iframe>")
}
}else if(b.google_ad_output=="textlink"){
a.write('<script language="JavaScript1.1" src='+m(d)+"><\/script>")
}
}
整个js文件整理之后的代码为:
下载地址:show_ads_2.rar (3.54 KB)
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 如何让你的CSS代码更具有组织性和易维护性,为什么你的样式表总是臃肿和混乱的?有些时候是源于一开始书写时的混乱和草率,有时候也是因为后期的维
- 本文实例讲述了JS实现获取毫秒值及转换成年月日时分秒的方法。分享给大家供大家参考,具体如下:时间日期对象创建方式一var date=new
- 如下所示:#ltp_data 字符串 写进777.txt1、def save(filename, contents): fh = open(
- 方法一、尽量使用复杂的SQL来代替简单的一堆 SQL.同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率。有多个查询时,要善
- 柱形图bar()函数绘制柱形图import matplotlib.pyplot as plx = [1,2,3,4,5,6,7]y = [1
- 本文实例讲述了Python实现的井字棋(Tic Tac Toe)游戏。分享给大家供大家参考,具体如下:说明用python实现了井字棋,整个框
- 以前装过sql server,后来删掉。现在重装,却出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动
- 如下所示:# -*- coding: utf-8 -*-from __future__ import unicode_literalsfro
- 写一个简单的例子程序:# coding:utf-8import flaskfrom flask import json, jsonify,
- root账户为MySQL的超级管理员用户,拥有MySQL提供的所有权限。我们登录了root账户可以重置其它创建的所有用户的密码,那么root
- 目录一、Python 3.8 安装1.通过 Apt 安装Python3.82.配置 python3.8 为系统默认 python3二、卸载p
- ASP生成柱型体,折线图,饼图源代码。一:纯ASP代码生成图表函数2——折线图;二:纯ASP代码生成图表函数1——柱状图 ;三:纯
- 批处理可以很方便地和其它各种语言混合编程,除了好玩,还有相当的实用价值,比如windows版的ruby gem包管理器就是运用了批处理和ru
- 一、使用 PyCharm 软件安装 pandas 包1、打开 PyCharm2、点击右上角 “Files” →“Settings...”3、
- 1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果
- 升级背景:为了解决mysql低版本的漏洞,从mysql5.5升级到了8.0.11版本,再次升级到了8.0.17版本(从版本是2019.7.2
- 上一篇文章写到原生js取代jquery的一些常用函数:原生js仿jquery一些常用方法,那么,ajax如何实现呢?如下是一个比较完整的aj
- Some readers have asked to me what
- pytorch中构建卷积层一般使用nn.Conv2d方法,有些情况下我们需要自定义卷积核的权值weight,而nn.Conv2d中的卷积参数
- With语句是什么?有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个