惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
Help Net Security
Help Net Security
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Hacker News: Front Page
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
Project Zero
Project Zero
T
Tailwind CSS Blog
V
Vulnerabilities – Threatpost
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
Last Week in AI
Last Week in AI
腾讯CDC
Schneier on Security
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
量子位
L
Lohrmann on Cybersecurity
J
Java Code Geeks
Cyberwarzone
Cyberwarzone
Recent Announcements
Recent Announcements
IT之家
IT之家
博客园_首页
罗磊的独立博客
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Fortinet All Blogs
博客园 - Franky
P
Palo Alto Networks Blog
V2EX - 技术
V2EX - 技术
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
N
News and Events Feed by Topic
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog RSS Feed
Cisco Talos Blog
Cisco Talos Blog
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
G
GRAHAM CLULEY
Cloudbric
Cloudbric

博客园 - birdshome

围观腾讯云输入法如何回发用户输入 《死了都要TRY》——迎接2010 Windows Server 2008 hang up问题 低功耗Atom下载机兼Home Server咯 这里的Windows 3.1你注意到了吗? EeePC 901换装Windows XP的步骤 在Windows 2003下使用QuickCam 自己动手DIY了一个内存散热棒棒糖 微软2008发布会,英雄由{此}诞生! 要参加微软2008三驾车发布的冒个泡 将Nokia 6300 Firmware升级到5.5 别太迷信GMap了,其实YMap也不错 .NET缘,源自.NET,我的2007回顾 Visual Studio 2008如此改进了图标 技术上根本不思进取的金山词霸2007 北京TechEd 2007 及《微软360度》 2007微软技术大会(TechEd)开幕式 将Banner美观的放置于博客首页上 ASP.NET 2.0揭秘(中文版)国庆献礼
你还敢使用window.open弹广告吗?
birdshome · 2007-12-22 · via 博客园 - birdshome

    在任何一个希望对用户友好一些的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上买了一百多的东西。。。