鸟食轩
Microsoft .NET[C#] MVP 2003
随笔 - 332, 文章 - 870, 评论 - 5722, 引用 - 356
你还敢使用window.open弹广告吗?
在任何一个希望对用户友好一些的web页面中,弹出窗口这个功能基本上是报废了。别说真要使用上这功能,甚至于想一想都觉得这个念头恶心、邪恶。除了任意一个浏览器工具栏能将其拦截外,Windows XP SP2以后已经在IE里内置了对弹出窗口的阻止。这真是web开发中一个无比搞笑,而又尴尬的功能。
window.open作为一个普通的浏览器API接口,因为一小撮人的滥用,造成了今天如同过街老鼠人人喊打的局面。又由于拦截弹出窗口的工具、插件过于普及,现在真正希望合理使用一下这个功能的网页,面对众多的拦截器,也都不得不放弃之。当然还有很多政府部门的网站,喜欢使用这个功能来弹出通告,并且不辞辛劳的提醒用户:如果您的浏览器会拦截弹出窗口,请将此功能关闭。
在这个绞杀弹出窗口的混世之中,还出现过连window.prompt也拦截的Orz工具。甚至有段时间,装上google工具条后,由于默认拦截设置过于凶猛,连点击超级链接弹出的窗口都被拦截,需要稍作设置,才能只拦截window.open开启的窗口。现今做的比较好,又比较人性化的弹出窗口拦截工具,只会拦截通过脚本自动触发的弹出窗口。如果是人工操作网页触发的弹出窗口会被认为是合法的,可以弹出。
这样的境况之下,你还敢用window.open来弹广告吗?
我倒是不敢了,虽然我没有这种需求,可能一时半会儿也遇不到。不过我却发现taobao居然使用window.open在弹广告!
小样,被拦截了吧!可是,我当关闭开启taobao的这个浏览器后,发现广告居然还是弹出来了,这段时间是《集结号》DVD的预定促销。这就纳了个闷了,难道是我没看清楚?再来,刷一下页面,没有了,重开一个浏览器上去,还是没有了。
第二天上taobao,又看见有拦截弹出窗口的警告,一不小心又看见广告弹出来了。不过弹出广告的窗口都在主窗口之下,不注意还一般都看不到。这下心想,taobao难道找到了window.open的新用法,可以避开对其的围追堵截!接下来当然是调试taobao的页面,找出这个小trick。结果却发现,taobao并没有找到什么真正的避免弹出窗口被拦截的方法,而是借用用户的手去开启广告窗口。这下就更有意思了,难道一点taobao的页面就弹一坨广告出来,大家会买他的帐吗?
看了taobao的弹出窗口代码后,说不上醍醐灌顶,但是恍然大悟还是有一点的。
(
function
()
{
var
_init
=
function
()
{
var
debug
=
(location.hostname.indexOf(
'
.taobao.com
'
)
==
-
1
);
if
(TB.bom.getCookie(
'
_tb_defaultbackpop_
'
)
==
1
&&
!
debug)
return
;
var
nowDate
=
new
Date();
var
nowTime
=
nowDate.getHours()
*
3600
+
nowDate.getMinutes()
*
60
+
nowDate.getSeconds();
var
DAY
=
24
*
3600
;
var
leaveTime
=
DAY
-
nowTime;
TB.bom.setCookie(
'
_tb_defaultbackpop_
'
,
1
, leaveTime
/
DAY, document.domain, '
/'
);
var popuped = false;
var popAd = function() {
if (popuped) return;
popuped = true;
var purl=
'
http:
//
www.taobao.com/promotion/defaultbackpop.html';
var
w
=
760
;
var
h
=
480
;
var
adPopup
=
window.open(
'
about:blank
'
,
'
_blank
'
,
'
width=
'
+
w
+
'
,height=
'
+
h
+
'
, ...
'
);
adPopup.blur();
adPopup.opener.focus();
adPopup.location
=
purl;
$E.removeListener(document.body,
'
click
'
, arguments.callee);
return
adPopup;
}
try
{
popAd();
}
catch
(e)
{
popuped
=
false
;
$E.on(document.body,
'
click
'
, popAd);
}
}
$E.on(window,
'
load
'
, _init);
})();
// (function(){})(); 这个写法到没啥意思,就等同于:function foo(){}; foo();
原来taobao发现如果不能自动的弹出窗口,就把弹窗口的函数邦到document.body的onclick事件面上去。这样一来只要用户一点击页面的任何位置,就会触发window.open弹出广告。当然这个时候的window.open就不是脚本自动触发的了,而是用户手动触发,在友好的拦截器下,这是合理的open。这个不是taobao最高明的地方,接下来的adPopup.blur();和adPopup.opener.focus();才是精华!
设计这个弹出窗口的人也深知,咣一下来个弹出窗口广告非常的不友好,八层也不被大家伙接受。所以taobao的弹出窗口非常的低调,弹出来以后自己立即就躲在后面去了,这时除了任务栏上多了一个IE的任务和有音响的机器会发出一个提示音外,对用户浏览taobao来说没有任何影响。接下来用户买完东西关闭taobao的浏览器才会看到,怎么有个广告窗口呢?难道是自己什么时候不小心点出来的?如果正好感兴趣就看两眼,不敢兴趣就关闭它,也不会多想。而且taobao做了优化,cookie里有记录,这个首页的弹出窗口一天只会弹一次。
这下我明白了,taobao用了一点小trick,弹出了"万恶"的弹出窗口广告,但是并没有引起用户太多的反感,包括像我这样对用户体验如此敏感的用户。这里又可以引用google adSense这个经典了,大家都在网上做广告,有人做到臭大街,比如众多的广告流氓软件;有人做到了世界上最有价值和潜力的公司。远有让微软坐立不安的google,近有马云说的拿着望远镜也看不到竞争对手的taobao。
题外话:为了调试找出这个弹出窗口的秘密,结果不小心又在taobao上买了一百多的东西。。。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2007-12-22 23:02
birdshome
阅读(22323)
评论(64)
编辑
收藏
评论
2269621
#1楼
回复
引用
查看
靠,太牛了,太聪明了,佩服啊。
2007-12-23 00:52
|
Jeffrey Zhao
#2楼
回复
引用
查看
这都能想来,真是有创意。
LZ花了一百多知道这个秘密也值,我从精神上支持你:-D
2007-12-23 01:06
|
stonezhu
#3楼
回复
引用
查看
注意到了,我说怎么上淘宝都会弹出个广告,明明被“咔哒”一声拦截了。
2007-12-23 01:06
|
大-犇
#4楼
回复
引用
大概在今年初在一个H站看到过,不过他是在用户点超连接的时候弹,当时我分析了下,他是给所有的A标签加事件,然后根据几率弹,只有5/100的几率弹,而且弹那个广告都是随机的.
2007-12-23 01:19
|
xmlcss[未注册用户]
#5楼
回复
引用
查看
牛的不行.
前天上taobao关闭时也发现了广告.
心想什么时候弹出来的.
也没多在意思.
说到底还是LZ牛啊.把牛角都挖来啦...
2007-12-23 01:24
|
pk的眼泪
#6楼
回复
引用
查看
寒 这个可不是淘宝发明的方法,做垃圾站的05年就开始用这个方法了,淘宝这个毕竟是大站设置为每天第一次点击弹一次,垃圾站都是每次访问网站第一次点击都要弹的
2007-12-23 01:36
|
kuafoo
#7楼
回复
引用
查看
楼主真厉害啊~~
2007-12-23 01:54
|
孙飞
#8楼
回复
引用
查看
呵呵,刚才去了淘宝,发现确实如你所说啊!
2007-12-23 01:57
|
孙飞
#9楼
回复
引用
淘宝是弹广告的鼻祖,2005年之前你只要上任何网站,弹窗广告里90%都是淘宝的。那时候淘宝如过街老鼠,人人喊杀。
等脸混熟后,就开始漂白了,他娘的,不愧为个中国顶级的流氓大亨。
这让我想起了《黑金》里的周朝先。
周朝先被灭了,淘宝还在......
2007-12-23 02:38
|
小S[未注册用户]
#10楼
回复
引用
高,实在是高~~
2007-12-23 02:55
|
Eeyore[未注册用户]
#11楼
回复
引用
查看
效果当然不好,但有些网站还在用,招商银行的首页弹出公告就是的
2007-12-23 08:29
|
chy710
#12楼
回复
引用
查看
实在高明,不过强行注册整个页面的 click 事件的确是流氓之处;隐藏广告,的确有未用户着想的情况,但是是不是有点欺骗的行为?
2007-12-23 09:30
|
风之细语
#13楼
回复
引用
查看
真细心:) 攒一个!
2007-12-23 09:44
|
Tony Qu
#14楼
回复
引用
查看
佩服~~~
2007-12-23 09:45
|
张子阳.
#15楼
回复
引用
查看
哈哈不错!不过LZ这一曝光,可不要这种方式也开始泛滥了阿^_^
2007-12-23 09:57
|
SZW
#16楼
回复
引用
查看
强呀,呵呵,阿里巴巴的Web工程师很专业呀
2007-12-23 10:02
|
蛙蛙池塘
#17楼
回复
引用
查看
收下了,受启发了
2007-12-23 10:24
|
雨哲
#18楼
回复
引用
查看
淘宝弹出窗口广告独家内幕曝光,呵呵:)
2007-12-23 10:45
|
TerryLee
#19楼
回复
引用
查看
题外话:为了调试找出这个弹出窗口的秘密,结果不小心又在taobao上买了一百多的东西。。。
---
万恶的taobao
2007-12-23 11:11
|
没剑
#20楼
回复
引用
国外的很多网站早已经使用这种方法,提高用户的体验,这样不会使用户产生厌恶感
2007-12-23 11:23
|
9527[未注册用户]
#21楼
回复
引用
(function(){})();
它这个写法是表示那段代码只是个过程,但又不希望污染全局变量,是比较推荐的写法(现在很多JS框架的初始化过程都是如此)。
2007-12-23 12:24
|
RainChen[未注册用户]
#22楼
回复
引用
呵呵,既然bz已经把这个揭露出来,我不妨再爆一个IE下自动弹窗方法,这个方法只有IE支持。IE 支持 fireEvent 原生事件。所以只要:
element.onclick=function(){popAd();};
element.fireEvent("onclick");
就可以连点击都省掉。
“解禁”的方法还很多,甚至某些“弹窗限制工具栏”要求按下Ctrl才弹窗的限制也可突破。
本不想说,只是这些都不是秘密,早被广告兜售者们广泛采用。园子里就有几个lj挂了这些东西。
2007-12-23 12:31
|
A1[未注册用户]
#23楼
回复
引用
查看
做垃圾站的都知道。。
2007-12-23 12:38
|
Zhuang miao
#24楼
回复
引用
楼主不妨再研究一下新浪的。这个垃圾站现在还在疯狂弹广告窗口。
2007-12-23 13:31
|
Vader[未注册用户]
#25楼
回复
引用
查看
感觉标题应该是:你“会”使用window.open弹广告吗?
2007-12-23 14:52
|
Jeffrey Zhao
#26楼
[
楼主
]
回复
引用
查看
@TerryLee、Jeffrey Zhao
免费粥啊。。。(参阅水母Joke精华)
2007-12-23 16:30
|
birdshome
#27楼
回复
引用
查看
尽管它是trick,但我喜欢这样的AD,也喜欢楼主这种仔细观察的精神。
2007-12-23 17:44
|
伍迷
#28楼
回复
引用
查看
楼主厉害 可以看出来是很细心的
2007-12-23 19:48
|
高海东
#29楼
回复
引用
这个办法很多网站都有的说。
点任何一个超链接(甚至是任何位置),都是弹出广告窗口,而真正的页面在原页面里自动刷新出来。
2007-12-23 19:55
|
zzzevazzz[未注册用户]
#30楼
回复
引用
楼主。。做一个小例子啊。。拿过来就能运行的最好。写了那么多。不懂。
2007-12-23 23:39
|
无名001[未注册用户]
#31楼
回复
引用
查看
嘿嘿,很好的用户体验^-^
2007-12-24 08:10
|
兰亭
#32楼
回复
引用
查看
用DIV做广告。。。
2007-12-24 09:43
|
风海迷沙
#33楼
回复
引用
查看
$E.removeListener(document.body, 'click', arguments.callee);
$E.on(document.body, 'click', popAd);
$E.on(window, 'load', _init);
什么东东??
2007-12-24 11:22
|
zwwon
#34楼
回复
引用
查看
首页上只有这篇文章有价值了.....
2007-12-24 12:22
|
小宇哥哥
#35楼
回复
引用
大多数网站都是绑定onclick来放广告的.
可以说, 只要是网站想放广告, 一定能放得出.
现在blocker唯一好处就是不怕广告层层叠了.
令我, 个人喜欢
new function()
{
}
2007-12-24 15:14
|
STS[未注册用户]
#36楼
回复
引用
查看
讨厌的广告啊,人就是倾向于自动忽略所有广告。
2007-12-24 22:32
|
Cat Chen
#37楼
回复
引用
查看
原来不会,现在会了.....
2007-12-25 08:26
|
BlackCat
#38楼
回复
引用
查看
我用FF,看他怎么弹。
2007-12-25 10:38
|
蜀山雪狼
#39楼
[
楼主
]
回复
引用
查看
@Cat Chen
在这个市侩的潮流和环境中,广告已经成了我们生活的一部分,没有办法逃避。能尽量降低广告对用户的打扰就非常不错了,比如现在电视上插播广告会告诉你这广告会持续多久。换个角度,插播广告的空档,正好让我上个厕所也不错,赫赫。
为了流量和广告,一个好好的文章在新闻网站上被拆成了n页,每页中正文远小于页面中其它的广告内容,我们也习惯了。大家都是为了生存,再说如果真的没有了广告,也就没有google了。生存的压力和不要广告的尊严哪一个更重要?
@蜀山雪狼
这简直是歧视firefox用户啊~ 广告,天天见。
2007-12-25 11:16
|
birdshome
#40楼
回复
引用
查看
抄袭了您的广告布局,罪过,罪过-_-|
2007-12-26 12:11
|
craboYang
#41楼
回复
引用
原来是不会用,现在学会啦。谢谢LZ :P
2007-12-27 10:26
|
匿名1[未注册用户]
#42楼
回复
引用
这个不是taobao最高明的地方,接下来的adPopup.blur();和adPopup.opener.focus();才是精华!
2007-12-27 16:51
|
PluCchou[未注册用户]
#43楼
回复
引用
这都被你发现了,我顶你!!
上有政策、下有对策,taobao做成这样,也是被逼的啊。
2008-01-01 23:17
|
wzjiang[未注册用户]
#44楼
回复
引用
偶一般都不用IE,呵呵!所以基本没这个烦恼!
2008-01-12 09:51
|
Eric ZZ[未注册用户]
#45楼
回复
引用
查看
太有才了~~
2008-01-21 13:44
|
阿瑞--16hi
#46楼
回复
引用
查看
有点意思
2008-01-24 16:38
|
zzticzh
#47楼
回复
引用
查看
好方法~
楼主挺细心的
2008-01-29 12:34
|
looping
#48楼
回复
引用
查看
太高明了啊啊啊
2008-02-23 20:48
|
代码乱了
#49楼
回复
引用
楼主 你太牛逼了 感谢你
2008-03-03 10:32
|
www.chinaflw.com[未注册用户]
#50楼
回复
引用
--引用--------------------------------------------------
zwwon: $E.removeListener(document.body, 'click', arguments.callee);
$E.on(document.body, 'click', popAd);
$E.on(window, 'load', _init);
什么东东??
--------------------------------------------------------
YUI 框架
2008-03-14 12:53
|
手气不错[未注册用户]
#51楼
回复
引用
楼主是个细心的人啊,记录下,没准那天我该行做门户了,还可以用上.
2008-04-12 18:26
|
sunyujia[未注册用户]
#52楼
回复
引用
查看
强淫。。。
2008-05-20 10:36
|
小隐任行
#53楼
回复
引用
好厉害!佩服啊
2008-06-08 09:05
|
osn0827[未注册用户]
#54楼
回复
引用
刚刚关注博主的文章,很有意思,以后会常来学习的
2008-08-22 17:16
|
jinger_dz[未注册用户]
#55楼
回复
引用
原来如此。。。。我还以为我中病毒了。
2009-04-02 13:16
|
bzm[未注册用户]
#56楼
回复
引用
查看
用onmouseXXX来搞...
2009-06-18 16:55
|
Selfocus
#57楼
回复
引用
詳細的說明,很受用
2009-09-15 18:39
|
MorrisWang[未注册用户]
#58楼
回复
引用
虽然这个已经算不上什么新鲜事了,但仍然佩服博主的精神.
2009-10-18 19:20
|
pwwang[未注册用户]
#59楼
回复
引用
查看
$E.removeListener(document.body, 'click', arguments.callee);
这个句子,应该才是最牛B的地方吧。
2010-06-24 13:54
|
sw16814
#60楼
回复
引用
查看
不错的东西
2010-08-11 17:39
|
luckuny
#61楼
回复
引用
查看
高明!流氓是流氓了点、可是你想的出来么。如果当初是你第一个想出来、还得意得耍流氓的是你自己吧、呵呵。绝不是攻击谁谁谁啊、是欣赏这些即使流氓的创新精神。各位、加油!
2011-06-11 07:14
|
色友、
#62楼
回复
引用
查看
楼主果然很给力,发现淘宝秘密的同时,还没有忘记支持淘宝,淘宝一定不会怪你的!
2011-07-18 17:24
|
56fix
#63楼
回复
引用
查看
不错,学习了
2011-08-29 15:31
|
lilyshy
#64楼
回复
引用
查看
不错
2011-12-14 09:25
|
轻轻我心
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
阿里巴巴云计划被指“3个臭皮匠不敌诸葛亮”
·
支付公司Stripe融资1800万美元 估值1亿美元
·
诺基亚Lumia 910第三方保护壳现身亚马逊
·
窝窝团出现访问故障 官方称网站访问量过大
·
杨致远的中国缘:退却后能否与周鸿祎一笑泯恩仇
»
更多新闻...
最新知识库文章
:
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
·
前端必读:浏览器内部工作原理
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
导航
博客园
首页
新随笔
联系
订阅
管理
公告
Invert
原创
技术文章和心得,
转载
必须注明来源
"博客园"
!
贴子以"现状"提供,且没有任何担保,同时也没有授予任何权利。
昵称:
birdshome
园龄:
7年10个月
荣誉:
推荐博客
粉丝:
73
关注:
3
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
Nokia 6300
(2)
fan
(1)
qq
(1)
腾讯
(1)
输入法
(1)
隐私
(1)
随笔分类
(337)
.NET的私有工具类(2)
(rss)
.NET技术开发相关(34)
(rss)
Asp.net控件开发(14)
(rss)
Debug中的滑铁卢(9)
(rss)
Enjoy Computer :)(27)
(rss)
Jscript&Dhtml开发(162)
(rss)
技术区里的非技术(49)
(rss)
开发中遇到的虫子(14)
(rss)
其它编程相关内容(16)
(rss)
商务智能(BI)开发(10)
(rss)
文章分类
(147)
北京的幸福生活(29)
(rss)
不得不转载(19)
(rss)
乖乖的文章(6)
(rss)
那时还没有blog(4)
(rss)
那是相当八卦(10)
(rss)
手机短信息(1)
(rss)
我们的文章(40)
(rss)
珍贵照片的背景(4)
(rss)
重庆的幸福生活(34)
(rss)
相册
2005 Kick Off @ 涞滩
2006 Kick Off @ 钓鱼城
2006 Offsite @ 四面山
2006 Wedding @ 昆明
2007 Marriage @ 哈尔滨
2007 Offsite @ Thailand
2007 Offsite @ 海南云天
2007 Training @ Seattle
2007 Travelling @ 云南
2008 Travelling @ 天津
乱七八糟的收集
Ex-Colleagues
Jason Lei's Space
.Net Life
(rss)
Jasper
(rss)
Michelles Space
xingd.net
(rss)
玻璃缸
(rss)
短鲷生活
海阔天空
录一室
(rss)
完美的泡菜
(rss)
怡红公子
(rss)
竹叶尖的BLOG
常用链接
Engadget 中文版
PDFCHM eBooks
SitePoint Forums
The Code Project
安利上海直销店
哈尔滨工业大学
哈工大紫丁香
海归论坛
(rss)
沙坪坝区中医院
兄弟情深
没有可乐的日子
葡萄树下不乘凉
(rss)
斯普特尼克
猪头小队长
(rss)
积分与排名
积分 - 3145044
排名 - 6
最新评论
阅读排行榜
推荐排行榜