A-A+

jquery强制弹出新窗口window.open

2016年01月07日 前端设计 暂无评论 阅读 6 views 次

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

在很多网站中,会有弹出窗口,通常采用window.open的方式,但是这个方式一般被浏览器给禁止了。

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

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

言归正传。如何用jquery强制弹出新窗口?

今天分享一个办法,直接上代码,代码如下:

  1. //打开新链接方法实现  
  2. function windowOpen(){  
  3.     var a = document.createElement("a");  
  4.     a.setAttribute("href", url);  
  5.     if(target == null){  
  6.         target = '';  
  7.     }  
  8.     a.setAttribute("target", target);  
  9.     document.body.appendChild(a);  
  10.     if(a.click){  
  11.         a.click();  
  12.     }else{  
  13.         try{  
  14.             var evt = document.createEvent('Event');  
  15.             a.initEvent('click', truetrue);  
  16.             a.dispatchEvent(evt);  
  17.         }catch(e){  
  18.             window.open(url);  
  19.         }  
  20.     }  
  21.     document.body.removeChild(a);  
  22. }  
  23. //新窗口打开  
  24. windowOpen('http://www.xiariboke.net/', '_blank');  
  25. //当前窗口打开   
  26. windowOpen('http://www.xiariboke.net/', '_self');  

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

问题:目前无法在异步的情况下调用该方法,代码如下:

  1. //以下做法将得不到期望的结果,会被浏览器阻止$.get("https://www.xiariboke.net/ajax",function(){  
  2.     windowOpen('http://www.xiariboke.net/', '_blank');  
  3. });  

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

标签:

给我留言