window.open浏览器弹出新窗口被拦截

时间:2021-10-12 03:47:08

最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,,但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,百思不得其解,后来查了一下,各家浏览器支持的不一样。

另外,可以发现,当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了

使用了一个可定制弹出窗口的外观、尺寸大小、弹出位置以适应该页面的window.open()方法,代码如下:

[html]  

 

 

window.open浏览器弹出新窗口被拦截

window.open浏览器弹出新窗口被拦截

<SCRIPT LANGUAGE="java script:>   

<!--   

window.open (‘page.html‘,‘newwindow‘,‘height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,   

location=no,status=no‘)   

//写成一行   

-->   

</SCRIPT>  

[html]  

 

 

window.open浏览器弹出新窗口被拦截

window.open浏览器弹出新窗口被拦截

参数解释:   

window.open 弹出新窗口的命令;   

page.html 弹出新窗口的文件名;   

newwindow 弹出窗口的名字(不是文件名),可用空 ″代替;   

height=100 窗口高度;   

top=0 窗口距离屏幕上方的像素值;   

left=0 窗口距离屏幕左侧的像素值;   

toolbar=no 是否显示工具栏,yes为显示;   

menubar,scrollbars 表示菜单栏和滚动栏;   

resizable=no 是否允许改变窗口大小,yes为允许;   

location=no 是否显示地址栏,yes为允许;   

status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;   

原因分析

当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这可能是一个广告,不是一个用户希望看到的页面。

解决方案: 1、使用a标签替代

给出如下函数,将此函数绑定到click的事件回调中,就可以避免大部分浏览器对窗口弹出的拦截:

[html]  

 

 

window.open浏览器弹出新窗口被拦截

window.open浏览器弹出新窗口被拦截

function newWin(url, id) {  

              var a = document.createElement(‘a‘);  

              a.setAttribute(‘href‘, url);  

              a.setAttribute(‘target‘, ‘_blank‘);  

              a.setAttribute(‘id‘, id);  

              // 防止反复添加