`

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

阅读更多

转自:http://www.cnblogs.com/litao229/archive/2012/02/24/2367056.html

 

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

btn.onclick=function(){

     function aa (){

       window.open("xxx");

    }

    aa();

}

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

btn.onclick=function(){  

       window.open("xxx");

}

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

也可以代码可编写如下:


复制代码
var $E = YAHOO.util.Event; 
var adPopup; 
var popAd = function(sURL,sName,sFeatures,bReplace) {
 if (adPopup)
 return;
 if(sName == undefined) {
 sName = '_blank'; 
 }; 
 if(sFeatures == undefined) { 
 sFeatures = ''; 
 }; 
 if(bReplace == undefined) { 
 bReplace = false;
 }; 
 adPopup = window.open(sURL,sTarget,sFeatures,bReplace);
 adPopup.blur();
 adPopup.opener.focus();
 $E.removeListener(document.body, 'click', arguments.callee); } 
 try { popAd(); } catch (e) { $E.on(document.body, 'click', popAd); }
复制代码

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

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

       

复制代码
  function openUrl( url ){
         var f=document.createElement("form");
         f.setAttribute("action" , url );
         f.setAttribute("method" , 'get' );
         f.setAttribute("target" , '_black' );
         document.body.appendChild(f)
         f.submit();
      }

      openUrl("http://www.qq.com")
复制代码
分享到:
评论
1 楼 LJinker 2015-10-08  
无法带参数

相关推荐

    详解window.open被浏览器拦截的解决方案

    最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥...

    window.open关于浏览器拦截问题分析及解决方法

    我现在要说的是window.open函数的几个使用策略,一般情况下,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会拦截你,认为你将弹出广告等用户不想得到的窗体,所以如果不想让浏览器拦截你,你...

    window.open被浏览器拦截后的自定义提示效果代码

    现在越来越多的浏览器有拦截弹出窗口的功能。广告弹出来给拦掉了就无所谓,要是客户在付款时给拦掉了可就不能乱算了。 Gmail的“哎呀”算是经典,可是,前天心云给出了更帅的提示=。= 记得打开浏览器拦截后 测试...

    JS弹出新窗口被拦截的解决方法

    在Web编程中,使用JS在新窗口打开页面的时候,会遇到被浏览器拦截的情况,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢? 一、问题一 一般情况下,如果直接在js中调用window.open()函数去打开一个新窗口,...

    模拟用户点击弹出新页面不会被浏览器拦截

    相信用过window.open的小伙伴们都遇到过被浏览器拦截导致页面无法弹出的情况;我们换下思路,什么情况下的新页面弹出才不会被浏览器拦截呢?比如标签这种就不会;那么我们只要模拟下用户去主动点击这个标签就不会有...

    popup-blocker:一个可靠的有历史的弹出窗口拦截器

    Popup Blocker 是一个轻量级扩展程序,用于防止网站打开弹出窗口(而其他弹出窗口阻止程序在创建后不会阻止弹出窗口,而是在收到请求后阻止它们)。 该扩展程序会暂停所有类型的窗口打开请求以引起用户注意。 您...

    背投广告设计:用最少的时间来做最效率的事情

     我们可以增加判断,如果该弹出窗口被浏览器拦截,则只要用户点击页面就触发 window.open 事件,这样一般不会拦截,浏览器会认为这是用户的默认行为。  代码可编写如下: var $E = YAHOO.util.Event;var adPopup;...

    另类弹出窗口,跳过所有拦截工具

    一般直接用 window.open方法弹出新窗口最大的问题是在给一些浏览器或工具拦截了, 这个问题比较难解决, 上次忽然想到当用户点击连接再弹出新窗口时是不会拦截的, 何不用JS模拟这个点击事件,所以马上试下, 果然...

    ymPrompt弹出框

    在web开发中,对于浏览器默认的消息提示框(如alert,confirm等)外观无法控制,同时我们经常希望能实现一些window.open之类的弹出框,但window.open弹出框存在诸多问题,如可能被拦截,界面不美观等。 为了实现更好...

    更好的弹出式窗口拦截器2「Better PopUp Blocker 2」-crx插件

    v2.1.6.12:*,使用聪明的CreateEvent方法以避免网站行为中断*,如果用户直接单击v2.1.6.11,则允许在其主机名上弹出窗口:*,修复版本显示并重置默认选项v2.1.6.9: *,修复了不兼容的额外选项功能,例如:eval,...

    ymPrompt消息提示组件 4.0

    在web开发中,对于浏览器默认的消息提示框(如alert,confirm等)外观无法控制,同时我们经常希望能实现一些window.open之类的弹出框,但window.open弹出框存在诸多问题,如可能被拦截,界面不美观等。 为了实现更好...

    ymPrompt消息提示组件

    web开发中,对于浏览器默认的消息提示框(如alert,confirm等)外观无法控制,同时我们经常希望能实现一些window.open之类的弹出框,但window.open弹出框存在诸多问题,如可能被拦截,界面不美观等。 为了实现更好的...

    傲游浏览器3(Maxthon) 3.1.8.1000 正式版

    * 兼容模式 window.open 未利用空白页. [用户界面] * 解决某种情况下侧边栏显示错误的问题. * 嗅探器的选择框在没有嗅探到内容的情况下, 勾选后无法取消. * 解决一些傲游迅雷加速下载的界面和语言问题. [侧边栏] *...

    javascript背投广告代码的完善

    我们可以增加判断,如果该弹出窗口被浏览器拦截,则只要用户点击页面就触发 window.open 事件,这样一般不会拦截,浏览器会认为这是用户的默认行为。 代码可编写如下: 代码如下:var $E = YAHOO.util.Event; ...

    jQuery实现优雅的弹窗效果(6)

    弹窗是网页中经常看到的效果,以前的弹窗是用window.open()等方式在浏览器窗口新建另一个新窗口来完成的,这种弹窗方式现在已经被很多浏览器所拦截。今天我们来用更加友好的方式来实现弹窗效果。完成的功能效果如图...

Global site tag (gtag.js) - Google Analytics