如何防止window.open打开的弹出窗口被浏览器拦截

大家看看下面的代码,或许可以对你有帮助,大家快快存档起来吧,一定对你的学习有好处,赶快看看

自己在学习的过程中遇到的许多的问题,好好理解就行了大家能在一起共同学习是缘分!

我们自己在学习的过程当中我们会遇到许多的问题,只要大家努力的学习就能有所成就。

希望帮到大家,大家赶快存储起来,有用的时候随时查找。

经常有人用window.open()的时候被浏览器拦截了  比如

  1. btn.οnclick=function(){

  2. function aa (){

  3. window.open("xxx");

  4. }

  5. aa();

  6. }
复制代码


其实,如果你的window.open写在用户事件处理函数的当前作用域下,是不会的,只要用户点击页面就触发 window.open事件,这样一般不会拦截,浏览器会认为这是用户的默认行为。

  1. btn.οnclick=function(){ 

  2. window.open("xxx");

  3. }
复制代码


其实这样的代码是可行的不会有问题

也可以代码可编写如下:

  1. var $E = YAHOO.util.Event; 
  2. var adPopup; 
  3. var popAd = function(sURL,sName,sFeatures,bReplace) {
  4. if (adPopup)
  5. return;
  6. if(sName == undefined) {
  7. sName = '_blank'; 
  8. }; 
  9. if(sFeatures == undefined) { 
  10. sFeatures = ''; 
  11. }; 
  12. if(bReplace == undefined) { 
  13. bReplace = false;
  14. }; 
  15. adPopup = window.open(sURL,sTarget,sFeatures,bReplace);
  16. adPopup.blur();
  17. adPopup.opener.focus();
  18. $E.removeListener(document.body, 'click', arguments.callee); } 
  19. try { popAd(); } catch (e) { $E.on(document.body, 'click', popAd); }
复制代码


当然如果用户浏览器安装了拦截插件,那很有可能不会弹出(比如 Firefox 的 noscript 插件,就不允许任何弹出窗)。方法不是绝对的,也不是最好的,只是用最少的时间来做最效率的事情。

PS:可以通过模拟 form 提交的方式来弹出窗口,穿越性(相对于一般拦截弹窗的插件)很好,不过无法设置 sFeatures 参数内容

  1. function openUrl( url ){
  2.          var f=document.createElement("form");
  3.          f.setAttribute("action" , url );
  4.          f.setAttribute("method" , 'get' );
  5.          f.setAttribute("target" , '_black' );
  6.          document.body.appendChild(f)
  7.          f.submit();
  8.       }

  9.       openUrl("http://www.qq.com")


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值