javascript 新浪背投广告实现代码
程序员文章站
2023-12-04 16:21:52
今天查看了下新浪的js代码,发现一个背投的广告类代码,不论是从学习角度还是使用角度都是不错的,但发现了一个问题,会被屏蔽的。下面是具体的js类代码复制代码 代码如下:/* 轮播背投类 rotatorp...
今天查看了下新浪的js代码,发现一个背投的广告类代码,不论是从学习角度还是使用角度都是不错的,但发现了一个问题,会被屏蔽的。
下面是具体的js类代码
/*
轮播背投类 rotatorpb v3.1
update by dakular <shuhu@staff.sina.com.cn> 2008-8-25
格式:new rotatorpb(广告数组)
说明:第一次访问随机出现,以后访问顺序轮播;自动过滤过期广告;cookie时间24小时;商业广告数量不足时不显示
*/
if(typeof(rotatorpb)!='function'){
var rotatorpb=function (rad){
this.ary = new array();
this.date = new date();
this.w = rad.width;
this.h = rad.height;
this.num = rad.num;
this.o = rad.length;
this.id = rotatorpb.id++;
this.m = 'rpb_'+this.id;
this.n = new array();
this.l = new date();
this.e = 0;
var f;
var d = false;
var nn = 0;
//过滤无效广告
for(var i=0; i<rad.length; i++){
var start = rotatorpb.strtodate(rad[i][2].replace('<startdate>','').replace('</startdate>',''));
var end = rotatorpb.strtodate(rad[i][3].replace('<enddate>','').replace('</enddate>',''),true);
if(this.date>start && this.date<end && (this.num==null || this.ary.length<this.num) ){
this.ary.push([rad[i][0], rad[i][1], rad[i][4]]);
}
}
this.o = this.ary.length;
//取id
for(var i=0;i<this.o;i++){
f=this.m+'_'+(i+1);
g=rotatorpb.g(f);
if(g!=''){
this.n[i]=g;
d=true;
}else {
this.n[i]=0;
}
}
if(!d){
var r=math.ceil(math.random()*this.o);
var t=this.m+'_'+r;
rotatorpb.s(t,this.l.gettime(),1440);
this.e=r;
if(this.o==1){rotatorpb.s('s_dl',r,1440);}
//return r;
}else {
var r=this.n.join(',').split(',');
var k=r.sort();
var max=number(k[k.length-1]);
var min=number(k[0]);
var f;
for(var i=0;i<this.n.length;i++){
if(max==this.n[i]){
f=i+1;
break;
}
}
if(typeof(f)!='undefined'){
g=this.m+'_'+f;
h=number(rotatorpb.g(g));
i=f%this.o+1;
j=this.m+'_'+i;
rotatorpb.s(j,this.l.gettime(),1440);
if(this.o==1){
i=-rotatorpb.g('s_dl');
if(i==0){i=1;rotatorpb.s('s_dl',1,1440);}
rotatorpb.s('s_dl',i,1440);
}
this.e=i;
//return i;
}
}
//show ad
if(this.e==0 || this.ary.length==0) return; //如果没有广告则不显示
if(this.e==-1) return; //当只有一个广告时:始终显示第一个/奇数次刷新显示
var n = this.e-1;
var btsrc = this.ary[n][0];
var bturl = this.ary[n][1];
var bttype = btsrc.substring(btsrc.length-3).tolowercase();
if(bttype=='.js'){ //js
document.write('<script language="javascript" type="text/javascript" src="'+btsrc+'"></scr'+'ipt>'); return;
}else if(bttype!='htm' && bttype!='tml'){
sinabturl = "http://d1.sina.com.cn/d1images/pb/pbv4.html?"+bturl+"${}"+bttype+"${}"+btsrc;
}else{
sinabturl = btsrc;
}
try{
aryadseq.push("openwindowback()");
}catch(e){
openwindowback();
}
if(this.ary[n][2]!=""){ //监测计数
var oimg = new image();
oimg.src = this.ary[n][2];
}
};
rotatorpb.id=1;
rotatorpb.g=function (n){
var c=document.cookie.split("; ");
for(var i=0;i<c.length;i++){
var d=c[i].split("=");
if(d[0]==n)return unescape(d[1]);
}return '';
};
rotatorpb.s=function (n,v,q){
var l=new date();
var z=new date(l.gettime()+q*60000);
document.cookie=n+"="+escape(v)+"; path=/; expires="+z.togmtstring()+";";
};
rotatorpb.strtodate = function(str,ext){
var arys = new array();
arys = str.split('-');
var newdate = new date(arys[0],arys[1]-1,arys[2],9,0,0);
if(ext){
newdate = new date(newdate.gettime()+1000*60*60*24);
}
return newdate;
}
var openwindowback = function(){
var popupwin2 = open(sinabturl, (window.name!="popupwin2")?"popupwin2":"", "width=1,height=1,top=4000,left=3000");
}
};
具体的调用代码:
<script src="rotator_pb.js"></script>
<script language=javascript type=text/javascript>
//<![cdata[
var rpb = new array();
rpb.num = 2; //轮播数量
<!--2220e7b88d58-->//背投广告创意
rpb.push(["http://img.jb51.net/demo/images/beitou.jpg", "https://www.jb51.net", "<startdate>2009-4-15</startdate>", "<enddate>2009-8-15</enddate>", ""]);
<!--$$ litong/2009-4-15 ~ 2009-8-15/b $-->
new rotatorpb(rpb);
//]]>
</script>
上面的beitou.jpg是图片的地址,后面的是链接, 开始日期 结束日期什么的大家参考下就可以了。
下面是具体的js类代码
复制代码 代码如下:
/*
轮播背投类 rotatorpb v3.1
update by dakular <shuhu@staff.sina.com.cn> 2008-8-25
格式:new rotatorpb(广告数组)
说明:第一次访问随机出现,以后访问顺序轮播;自动过滤过期广告;cookie时间24小时;商业广告数量不足时不显示
*/
if(typeof(rotatorpb)!='function'){
var rotatorpb=function (rad){
this.ary = new array();
this.date = new date();
this.w = rad.width;
this.h = rad.height;
this.num = rad.num;
this.o = rad.length;
this.id = rotatorpb.id++;
this.m = 'rpb_'+this.id;
this.n = new array();
this.l = new date();
this.e = 0;
var f;
var d = false;
var nn = 0;
//过滤无效广告
for(var i=0; i<rad.length; i++){
var start = rotatorpb.strtodate(rad[i][2].replace('<startdate>','').replace('</startdate>',''));
var end = rotatorpb.strtodate(rad[i][3].replace('<enddate>','').replace('</enddate>',''),true);
if(this.date>start && this.date<end && (this.num==null || this.ary.length<this.num) ){
this.ary.push([rad[i][0], rad[i][1], rad[i][4]]);
}
}
this.o = this.ary.length;
//取id
for(var i=0;i<this.o;i++){
f=this.m+'_'+(i+1);
g=rotatorpb.g(f);
if(g!=''){
this.n[i]=g;
d=true;
}else {
this.n[i]=0;
}
}
if(!d){
var r=math.ceil(math.random()*this.o);
var t=this.m+'_'+r;
rotatorpb.s(t,this.l.gettime(),1440);
this.e=r;
if(this.o==1){rotatorpb.s('s_dl',r,1440);}
//return r;
}else {
var r=this.n.join(',').split(',');
var k=r.sort();
var max=number(k[k.length-1]);
var min=number(k[0]);
var f;
for(var i=0;i<this.n.length;i++){
if(max==this.n[i]){
f=i+1;
break;
}
}
if(typeof(f)!='undefined'){
g=this.m+'_'+f;
h=number(rotatorpb.g(g));
i=f%this.o+1;
j=this.m+'_'+i;
rotatorpb.s(j,this.l.gettime(),1440);
if(this.o==1){
i=-rotatorpb.g('s_dl');
if(i==0){i=1;rotatorpb.s('s_dl',1,1440);}
rotatorpb.s('s_dl',i,1440);
}
this.e=i;
//return i;
}
}
//show ad
if(this.e==0 || this.ary.length==0) return; //如果没有广告则不显示
if(this.e==-1) return; //当只有一个广告时:始终显示第一个/奇数次刷新显示
var n = this.e-1;
var btsrc = this.ary[n][0];
var bturl = this.ary[n][1];
var bttype = btsrc.substring(btsrc.length-3).tolowercase();
if(bttype=='.js'){ //js
document.write('<script language="javascript" type="text/javascript" src="'+btsrc+'"></scr'+'ipt>'); return;
}else if(bttype!='htm' && bttype!='tml'){
sinabturl = "http://d1.sina.com.cn/d1images/pb/pbv4.html?"+bturl+"${}"+bttype+"${}"+btsrc;
}else{
sinabturl = btsrc;
}
try{
aryadseq.push("openwindowback()");
}catch(e){
openwindowback();
}
if(this.ary[n][2]!=""){ //监测计数
var oimg = new image();
oimg.src = this.ary[n][2];
}
};
rotatorpb.id=1;
rotatorpb.g=function (n){
var c=document.cookie.split("; ");
for(var i=0;i<c.length;i++){
var d=c[i].split("=");
if(d[0]==n)return unescape(d[1]);
}return '';
};
rotatorpb.s=function (n,v,q){
var l=new date();
var z=new date(l.gettime()+q*60000);
document.cookie=n+"="+escape(v)+"; path=/; expires="+z.togmtstring()+";";
};
rotatorpb.strtodate = function(str,ext){
var arys = new array();
arys = str.split('-');
var newdate = new date(arys[0],arys[1]-1,arys[2],9,0,0);
if(ext){
newdate = new date(newdate.gettime()+1000*60*60*24);
}
return newdate;
}
var openwindowback = function(){
var popupwin2 = open(sinabturl, (window.name!="popupwin2")?"popupwin2":"", "width=1,height=1,top=4000,left=3000");
}
};
具体的调用代码:
复制代码 代码如下:
<script src="rotator_pb.js"></script>
<script language=javascript type=text/javascript>
//<![cdata[
var rpb = new array();
rpb.num = 2; //轮播数量
<!--2220e7b88d58-->//背投广告创意
rpb.push(["http://img.jb51.net/demo/images/beitou.jpg", "https://www.jb51.net", "<startdate>2009-4-15</startdate>", "<enddate>2009-8-15</enddate>", ""]);
<!--$$ litong/2009-4-15 ~ 2009-8-15/b $-->
new rotatorpb(rpb);
//]]>
</script>
上面的beitou.jpg是图片的地址,后面的是链接, 开始日期 结束日期什么的大家参考下就可以了。
下一篇: 标准布局应用:对联与旗帜