Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144028
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 368
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-17 18:06
个人简介

一个直来直去的人,被生活折磨的弯弯曲曲。

文章分类

全部博文(29)

文章存档

2019年(1)

2017年(1)

2014年(13)

2013年(14)

我的朋友

分类: Web开发

2014-08-14 15:58:33

  目前情况下我们使用window.open自动弹出窗口都会给浏览器拦截掉了,但我们会发现有些网站还是可以弹出窗口了,这种是如何实现的呢?下面一起来看一下基于jquery的做法。
在很多网站中,会有弹出窗口,通常采用window.open的方式,但是这个方式一般被浏览器给禁止了。

说明这也是好事。现在的浏览器:360 猎豹  搜狗 等等都标明自己的安全性、智能性、屏蔽各种广告,给了用户很好的体验,但是可苦了我们这些站长们啊。

有广告还不显示出来,如何过活啊?

  言归正传。

如何用jquery强制弹出新窗口?

今天分享一个办法。

直接上代码:

 代码如下
//打开新链接方法实现
function windowOpen(){
    var a = document.createElement("a");
    a.setAttribute("href", url);
    if(target == null){
        target = '';
    }
    a.setAttribute("target", target);
    document.body.appendChild(a);
    if(a.click){
        a.click();
    }else{
        try{
            var evt = document.createEvent('Event');
            a.initEvent('click', true, true);
            a.dispatchEvent(evt);
        }catch(e){
            window.open(url);
        }
    }
    document.body.removeChild(a);
}
//新窗口打开
windowOpen('', '_blank');
//当前窗口打开
windowOpen('', '_self');
 

思路

其实做法很简单,首先模拟A标签点击打开新窗口,若失败再直接调用window.open方法。

问题

目前无法在异步的情况下调用该方法。如下:

 代码如下
//以下做法将得不到期望的结果,会被浏览器阻止$.get("",function(){
    windowOpen('', '_blank');
});
 

无法调用的原因是:浏览器中的javascript是单线程的。虽然$.get是ajax的一个方式,是异步的。但是这个异步只是一个模式,不是真正的浏览器异步线程。
自 

阅读(1989) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~