鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 429, 文章 - 235, 评论 - 5527, 引用 - 356
数据加载中……

你还敢使用window.open弹广告吗?

    在任何一个希望对用户友好一些的web页面中,弹出窗口这个功能基本上是报废了。别说真要使用上这功能,甚至于想一想都觉得这个念头恶心、邪恶。除了任意一个浏览器工具栏能将其拦截外,Windows XP SP2以后已经在IE里内置了对弹出窗口的阻止。这真是web开发中一个无比搞笑,而又尴尬的功能。

    window.open作为一个普通的浏览器API接口,因为一小撮人的滥用,造成了今天如同过街老鼠人人喊打的局面。又由于拦截弹出窗口的工具、插件过于普及,现在真正希望合理使用一下这个功能的网页,面对众多的拦截器,也都不得不放弃之。当然还有很多政府部门的网站,喜欢使用这个功能来弹出通告,并且不辞辛劳的提醒用户:如果您的浏览器会拦截弹出窗口,请将此功能关闭。

    在这个绞杀弹出窗口的混世之中,还出现过连window.prompt也拦截的Orz工具。甚至有段时间,装上google工具条后,由于默认拦截设置过于凶猛,连点击超级链接弹出的窗口都被拦截,需要稍作设置,才能只拦截window.open开启的窗口。现今做的比较好,又比较人性化的弹出窗口拦截工具,只会拦截通过脚本自动触发的弹出窗口。如果是人工操作网页触发的弹出窗口会被认为是合法的,可以弹出。

    这样的境况之下,你还敢用window.open来弹广告吗?

    我倒是不敢了,虽然我没有这种需求,可能一时半会儿也遇不到。不过我却发现taobao居然使用window.open在弹广告!

    Taobao.png

    小样,被拦截了吧!可是,我当关闭开启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 阅读(11517) 评论(56)  编辑 收藏 网摘 所属分类: 其它编程相关内容

评论

#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楼   回复  引用    

楼主 你太牛逼了 感谢你

#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      



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1010911





相关文章:

相关链接: