你还敢使用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上买了一百多的东西。。。


本文转自博客园的博客,

原文链接:http://www.cnblogs.com/birdshome ,如需转载请自行联系原博主。


目录
相关文章
|
2月前
|
Web App开发 开发框架 前端开发
移动端window.open跳转链接时,iOS没有反应的问题
【10月更文挑战第9天】在移动端使用 `window.open` 跳转链接时,iOS 可能无响应,原因是 iOS 的安全策略和弹出窗口阻止功能。解决方法包括:确保在用户交互后触发 `window.open`,将目标设置为 `_self`,使用锚点链接模拟跳转,或利用专门的移动端框架。需综合考虑这些方案以优化用户体验。
729 61
|
移动开发 缓存 JavaScript
微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)
微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)
2454 0
微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)
|
7月前
|
iOS开发
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
80 2
|
7月前
|
XML Java Android开发
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
532 0
|
移动开发 自然语言处理 JavaScript
移动端H5使用window.open跳转,IOS不生效解决
移动端H5使用window.open跳转,IOS不生效解决
882 2
|
移动开发 小程序 JavaScript
微信小程序学习实录8:H5网页跳转小程序(微信开放标签、wx-open-launch-weapp按钮不显示、noPermissionJsApi)
微信小程序学习实录8:H5网页跳转小程序(微信开放标签、wx-open-launch-weapp按钮不显示、noPermissionJsApi)
765 0
Revit API 不能直接隐藏(Hide)Group?另有它法!
Revit API 不能直接隐藏(Hide)Group?另有它法!
|
大数据 开发工具 git
还在使用Window原始的CMD界面?教你一招进行界面完美优化(上)
还在使用Window原始的CMD界面?教你一招进行界面完美优化
451 0
还在使用Window原始的CMD界面?教你一招进行界面完美优化(上)
还在使用Window原始的CMD界面?教你一招进行界面完美优化(下)
还在使用Window原始的CMD界面?教你一招进行界面完美优化
140 0
还在使用Window原始的CMD界面?教你一招进行界面完美优化(下)
|
iOS开发
ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
一般情况下点击效果都是正常的!要不然你对它做了什么?一般细心的小伙伴都没有遇到这种情况,但是呢! 当然我是二班的!在这里我主要讲两个问题,解决问题和普及魔法。 一.普及问题(button在cell上点击无效) 自定义一个cell,cell里边creat了一个button!然后调试了半天,什么反应都没有!   1.button的enable 设置为yes可点击的。
1497 0

热门文章

最新文章