因为最近在推广项目,所以看了下弹出窗口的js 下面是仿www.taobao.com首页的弹出广告, 代码如下
function fuyouOpen(targetUrl){
var win = window.open("about:blank","popup","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
win.blur();
win.opener.focus();
win.location=targetUrl;
createCookie('fuyouCookieName_interval',new Date().getTime(),0);
}
function fuyouClickPop(url){
document.onclick = function(){
fuyouOpen(url);
}
}
function fuyouPop(url){
try{
fuyouOpen(url);
}catch(e){
fuyouClickPop(url);
}
}
为什么我的代码在ie8下,不能弹出,还taobao的可以
我仔细看下与taobao代码的区别,没发现有什么不同下面是taobao相关弹出代码FP.popupAD=(function()
{
var d=YAHOO.util.Dom,a=YAHOO.util.Event;
var g="_tb_defaultbackpop_",//cookieName
e="http://www.taobao.com/promotion/defaultbackpop.html";
var c=function()
{
var j=new Date(); //时间
var k=j.getHours()*3600+j.getMinutes()*60+j.getSeconds();//秒
var m=24*3600;//一天
var l=m-k;//还有
var i=(function()
{
var n=TB.bom.getCookie(g)||0;
n>3?n=3:n=parseInt(n)+1;
return n
}
)();//读cookie //写cookie
TB.bom.setCookie(g,i,l/m,TB.bom.pickDocumentDomain(),"/")
};var b=function()
{
var i=window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();//弹出就失去焦点
i.opener.focus();//父窗口得到焦点
i.location=e;//加载地址
};var f=function()
{
try
{
b() //直接调用window.open
}
catch(i)
{
a.on(document,"click",h) //事件加到document onclick上
}
finally
{
c()
}
};
var h=function(i)
{
try
{
var k=a.getTarget(i);
if(k.id==="header"||d.isAncestor("header",k)||Array.indexOf(["input","select","option","button"],k.nodeName.toLowerCase())!=-1)
{
return
}
}
catch(j)
{
}
a.removeListener(document,"click",arguments.callee);
try
{
b()
}
catch(j)
{
}
};
function fuyouOpen(targetUrl){
var win = window.open("about:blank","popup","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
win.blur();
win.opener.focus();
win.location=targetUrl;
createCookie('fuyouCookieName_interval',new Date().getTime(),0);
}
function fuyouClickPop(url){
document.onclick = function(){
fuyouOpen(url);
}
}
function fuyouPop(url){
try{
fuyouOpen(url);
}catch(e){
fuyouClickPop(url);
}
}
为什么我的代码在ie8下,不能弹出,还taobao的可以
我仔细看下与taobao代码的区别,没发现有什么不同下面是taobao相关弹出代码FP.popupAD=(function()
{
var d=YAHOO.util.Dom,a=YAHOO.util.Event;
var g="_tb_defaultbackpop_",//cookieName
e="http://www.taobao.com/promotion/defaultbackpop.html";
var c=function()
{
var j=new Date(); //时间
var k=j.getHours()*3600+j.getMinutes()*60+j.getSeconds();//秒
var m=24*3600;//一天
var l=m-k;//还有
var i=(function()
{
var n=TB.bom.getCookie(g)||0;
n>3?n=3:n=parseInt(n)+1;
return n
}
)();//读cookie //写cookie
TB.bom.setCookie(g,i,l/m,TB.bom.pickDocumentDomain(),"/")
};var b=function()
{
var i=window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();//弹出就失去焦点
i.opener.focus();//父窗口得到焦点
i.location=e;//加载地址
};var f=function()
{
try
{
b() //直接调用window.open
}
catch(i)
{
a.on(document,"click",h) //事件加到document onclick上
}
finally
{
c()
}
};
var h=function(i)
{
try
{
var k=a.getTarget(i);
if(k.id==="header"||d.isAncestor("header",k)||Array.indexOf(["input","select","option","button"],k.nodeName.toLowerCase())!=-1)
{
return
}
}
catch(j)
{
}
a.removeListener(document,"click",arguments.callee);
try
{
b()
}
catch(j)
{
}
};
var i=window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();//弹出就失去焦点
i.opener.focus();//父窗口得到焦点
i.location=e;//加载地址
i.blur();//弹出就失去焦点
i.opener.focus();//父窗口得到焦点
i.location="http://www.baidu.com";//加载地址 点击查看运行效果:http://dl.getdropbox.com/u/2555620/jquery/test1.html
比如对window.open的阻止,并不是什么情况下都会阻止的
楼主可以做个实验,对一个文本框添加事件,分别是onfocus事件和onclick事件,都让它们的代码open一个新窗口。
结果你会发现,onfocus事件下,被阻止了,而onclick事件下顺利open也就是说,通常浏览器会进行这样的判断:
如果由用户通过鼠标点击的事件,那么不阻止,因为用户鼠标点击是相当于由用户确认了以后才打开的。
但是由非用户动作而open的窗口,就会被阻止。
所以网上很多地方也利用了假的关闭按钮来引诱用户点击而打开广告窗口。所以taobao中的代码就利用到了onclick事件的摸拟来绕过这种阻止方法
function myopen(url) {
var i=window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();//弹出就失去焦点
i.opener.focus();//父窗口得到焦点
i.location=url;//加载地址
}
在下列情况下,仍会看到弹出窗口处于打开状态:弹出窗口是通过用户单击链接打开的。弹出窗口是由在计算机上运行的软件打开的。弹出窗口是由从网站实例化的 ActiveX 控件打开的。弹出窗口是从“可信站点”或“本地 Intranet”区域打开的,而您尚未将弹出窗口阻止程序的作用域扩展到包括这些区域。
function fuyouOpen(e){
var i = window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();
i.opener.focus();
i.location=e;
}//这是我的代码上面是我的,在ie8是三次,有一次会报这样的问题
不是每次都报的
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
function removeEventSimple(obj,evt,fn) {
if (obj.removeEventListener)
obj.removeEventListener(evt,fn,false);
else if (obj.detachEvent)
obj.detachEvent('on'+evt,fn);
}
function netgyOpen(url){
var i = window.open("about:blank","_backad","width=750,height=480,toolbar=no,location=no,directories=no,status=yes,resizable=no,scrollbars=no");
i.blur();
i.opener.focus();
i.location=url;
createCookie('netgyCookieName_interval',new Date().getTime(),0)
}
function netgyClickPop(url){
function fnopen(){
netgyOpen(url);
}
addEventSimple(document,'click',fnopen)
//removeEventSimple(document,'click',fnopen);
}
function netgyPop(url){
try{
netgyOpen(url);
}catch(e){
netgyClickPop(url);
}
} 所有的代码
现在有二个总题:
1:ie8有时报服务器服务器出现意外情况,不是每次都这样,只是3次可能有1次
2:我想弹出窗口后,就把onclick取消了(上面有句注释的,好像不行 //removeEventSimple(document,'click',fnopen); ,),如果取消注释,就不弹出了
3:上面代码还有什么可以优化,让速度快些
4: 我只用了一点功能 ,就没用框架了,省得加大js文件大家帮我看看,
2.直接document.onclick=null;
3.代码基本没什么要优化的
Asp.net技术之BS模式下的MessageBox类