原文在 你还敢使用window.open弹广告吗?。现在浏览器大都禁止了 onload window.open,这个对淘宝相关代码的分析我倒是第一次看到。
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);
})();
有意思的就是后面这段
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);
先尝试 onload 弹出窗口,不行(try catch)就给 document.body 的 onclick 加上弹出。这下子变成用户主动的交互,很多浏览器的过滤器可能就会忽略掉。
我没有测试,我对这样的的技巧很反感,不道德。但我估计如果firefox在 about:config 禁用 window.open 这段代码还是没用。opera 的处理方式可能也不太一样。
这是一个据说通用(Cross-window)的弹出窗口代码。
function popitup(url) {
if (!newwindow.closed && newwindow.location) {
newwindow.location.href = url;
}
else {
newwindow=window.open(url,’name’,'height=200,width=150′);
if (!newwindow.opener) newwindow.opener = self;
}
if (window.focus) {newwindow.focus()}
return false;
}
相关资料: