window.open不被拦截

本文探讨了如何避免浏览器拦截window.open()函数打开的新窗口,包括直接在点击事件中调用该函数及通过模拟表单提交的方式实现。此外,还讨论了使用插件可能带来的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常有人用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")



转载于:https://www.cnblogs.com/litao229/archive/2012/02/24/2367056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值