背投广告特点:
对于背投广告的原理来说并没有什么难度,无非打开的窗口失去焦点(blur),而原来页面得到焦点(focus)。但对于流行的浏览器来说,如果非用户行为的弹出窗口(即onload时,直接window.open),会被浏览器默认拦截。
背投广告,既然被称为广告,那如何才能让广告主的钱花得实在,花得乐意呢?
我们可以增加判断,如果该弹出窗口被浏览器拦截,则只要用户点击页面(onclick)就触发window.open事件,这样一般不会拦截,浏览器会认为这是用户的默认行为。
同时,如果广告总是不断弹出,我想这是对用户的一种折磨,因此设计可调节的弹出频率,比如利用cookie控制一天只可以弹出一次就比较好。
阿里妈妈背投广告代码:
1 <script type="text/javascript">
2 //全局变量
3 var val_pop_w = 950;//广告页面的宽度
4 var val_pop_h = 90;//广告页面的高度
5 var val_pop_id = "mm_13250138_1917484_7967317";//广告id
6 var val_pop_t = 0;//广告距顶top距离
7 var val_pop_l = 0;//广告距左边left距离
8 var val_pop_day = 1;//广告频率天
9 var val_pop_num = 2;//广告频率次数
10
11 //添加监听事件
12 function addListener(element, e, fn){
13 element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn)
14 }
15 //删除监听事件
16 function removeListener(element, e, fn){
17 element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
18 }
19
20 function openWindowBack(){
21 var adPopup = window.open('', '背投广告', 'width=' + (parseInt(val_pop_w) + 1) + ',height=' + (parseInt(val_pop_h) + 1) + ', left=' + val_pop_l + ',top=' + val_pop_t);
22 //设置广告页面内容
23 var adhtml = "";
24 var adjs = "";
25 adjs += '<script type="text/javascript">';
26 adjs += 'alimama_pid="' + val_pop_id + '";';
27 adjs += 'alimama_titlecolor="0000FF";';
28 adjs += 'alimama_descolor ="000000";';
29 adjs += 'alimama_bgcolor="FFFFFF";';
30 adjs += 'alimama_bordercolor="E6E6E6";';
31 adjs += 'alimama_linkcolor="008000";';
32 adjs += 'alimama_bottomcolor="FFFFFF";';
33 adjs += 'alimama_anglesize="0";';
34 adjs += 'alimama_bgpic="0";';
35 adjs += 'alimama_icon="0";';
36 adjs += 'alimama_sizecode="15";';
37 adjs += 'alimama_width=' + val_pop_w + ';';
38 adjs += 'alimama_height=' + val_pop_h + ';';
39 adjs += 'alimama_type=2;';
40 adjs += '<\/script><script src="http://a.alimama.cn/inf.js" type=text/javascript><\/script>';
41 adhtml += '<html><body style="margin:0;padding:0px;text-align:left;">' + adjs;
42 adhtml += '</body></html>';
43 adPopup.document.write(adhtml);
44 }
45
46 var pop_back_ad = function(){
47 openWindowBack();
48 window.removeListener(document, 'click', arguments.callee);
49 }
50
51 function SetCookie(name, value, day)//三个参数,一个是cookie的名字,一个是值,一个保存天数
52 {
53 var Days = day; //此 cookie 将被保存 1 天
54 var exp = new Date(); //new Date("December 31, 9998");
55 exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
56 document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
57 }
58 function getCookie(name)//取cookies函数
59 {
60 var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
61 if (arr != null)
62 return unescape(arr[2]);
63 return null;
64 }
65 function delCookie(name)//删除cookie
66 {
67 var exp = new Date();
68 exp.setTime(exp.getTime() - 1);
69 var cval = getCookie(name);
70 if (cval != null)
71 document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
72 }
73
74 function chkpopad(n, d){
75 var i = 1;
76 if (getCookie('popnum') == null){
77 pop_back_ad();
78 SetCookie("popnum", i, d);
79 }
80 else if (getCookie('popnum')<n){
81 pop_back_ad();
82 SetCookie("popnum", parseInt(getCookie('popnum')) + 1, d);
83 }
84 }
85 try{
86 chkpopad(val_pop_num,val_pop_day);//设置背投广告的次数和保存cookie的天数
87 }catch(e){
88 window.addListener(document, 'click', function(){
89 chkpopad(val_pop_num, val_pop_day);
90 });
91 }
92 //delCookie("popnum");//删除cookie
93 </script>
2 //全局变量
3 var val_pop_w = 950;//广告页面的宽度
4 var val_pop_h = 90;//广告页面的高度
5 var val_pop_id = "mm_13250138_1917484_7967317";//广告id
6 var val_pop_t = 0;//广告距顶top距离
7 var val_pop_l = 0;//广告距左边left距离
8 var val_pop_day = 1;//广告频率天
9 var val_pop_num = 2;//广告频率次数
10
11 //添加监听事件
12 function addListener(element, e, fn){
13 element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn)
14 }
15 //删除监听事件
16 function removeListener(element, e, fn){
17 element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
18 }
19
20 function openWindowBack(){
21 var adPopup = window.open('', '背投广告', 'width=' + (parseInt(val_pop_w) + 1) + ',height=' + (parseInt(val_pop_h) + 1) + ', left=' + val_pop_l + ',top=' + val_pop_t);
22 //设置广告页面内容
23 var adhtml = "";
24 var adjs = "";
25 adjs += '<script type="text/javascript">';
26 adjs += 'alimama_pid="' + val_pop_id + '";';
27 adjs += 'alimama_titlecolor="0000FF";';
28 adjs += 'alimama_descolor ="000000";';
29 adjs += 'alimama_bgcolor="FFFFFF";';
30 adjs += 'alimama_bordercolor="E6E6E6";';
31 adjs += 'alimama_linkcolor="008000";';
32 adjs += 'alimama_bottomcolor="FFFFFF";';
33 adjs += 'alimama_anglesize="0";';
34 adjs += 'alimama_bgpic="0";';
35 adjs += 'alimama_icon="0";';
36 adjs += 'alimama_sizecode="15";';
37 adjs += 'alimama_width=' + val_pop_w + ';';
38 adjs += 'alimama_height=' + val_pop_h + ';';
39 adjs += 'alimama_type=2;';
40 adjs += '<\/script><script src="http://a.alimama.cn/inf.js" type=text/javascript><\/script>';
41 adhtml += '<html><body style="margin:0;padding:0px;text-align:left;">' + adjs;
42 adhtml += '</body></html>';
43 adPopup.document.write(adhtml);
44 }
45
46 var pop_back_ad = function(){
47 openWindowBack();
48 window.removeListener(document, 'click', arguments.callee);
49 }
50
51 function SetCookie(name, value, day)//三个参数,一个是cookie的名字,一个是值,一个保存天数
52 {
53 var Days = day; //此 cookie 将被保存 1 天
54 var exp = new Date(); //new Date("December 31, 9998");
55 exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
56 document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
57 }
58 function getCookie(name)//取cookies函数
59 {
60 var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
61 if (arr != null)
62 return unescape(arr[2]);
63 return null;
64 }
65 function delCookie(name)//删除cookie
66 {
67 var exp = new Date();
68 exp.setTime(exp.getTime() - 1);
69 var cval = getCookie(name);
70 if (cval != null)
71 document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
72 }
73
74 function chkpopad(n, d){
75 var i = 1;
76 if (getCookie('popnum') == null){
77 pop_back_ad();
78 SetCookie("popnum", i, d);
79 }
80 else if (getCookie('popnum')<n){
81 pop_back_ad();
82 SetCookie("popnum", parseInt(getCookie('popnum')) + 1, d);
83 }
84 }
85 try{
86 chkpopad(val_pop_num,val_pop_day);//设置背投广告的次数和保存cookie的天数
87 }catch(e){
88 window.addListener(document, 'click', function(){
89 chkpopad(val_pop_num, val_pop_day);
90 });
91 }
92 //delCookie("popnum");//删除cookie
93 </script>
在写的过程中遇到一个问题,就是IE和FireFox对document和window的解析不一样,刚开始我一头雾水,就请教克良同学,他老人家也是头一回遇到,google了很久,终于
在一个外国论坛上找到解决方案,但具体的原因还是不清楚。
1 //兼容IE和FireFox的监听事件的写法
2 //添加监听事件
3 function addListener(element, e, fn){
4 element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn)
5 }
6 //删除监听事件
7 function removeListener(element, e, fn){
8 element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
9 }
10 //删除监听事件:
11 window.removeListener(window, 'click', arguments.callee);//这种写法只有IE支持
12 window.removeListener(document, 'click', arguments.callee);//这种写法兼容IE和FireFox
13 //添加监听事件:
14 window.addListener(document, 'click', fn);
2 //添加监听事件
3 function addListener(element, e, fn){
4 element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn)
5 }
6 //删除监听事件
7 function removeListener(element, e, fn){
8 element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
9 }
10 //删除监听事件:
11 window.removeListener(window, 'click', arguments.callee);//这种写法只有IE支持
12 window.removeListener(document, 'click', arguments.callee);//这种写法兼容IE和FireFox
13 //添加监听事件:
14 window.addListener(document, 'click', fn);
背投广告相关问题:
当然如果用户浏览器安装了拦截插件,那很有可能不会弹出(比如Firefox的noscript插件,就不允许任何弹出窗)。方法不是绝对的,也不是最好的,只是用最少的时间来做最效率的事情。
可以通过模拟form提交的方式来弹出窗口,穿越性(相对于一般拦截弹窗的插件)很好,不过无法设置sFeatures参数内容。
demo页面:
http://img.alimama.cn/cms/images/1256207772626.html