window.open被浏览器拦截的问题(附解决方案)

最近用window.open()的时候,常常会被浏览器拦截(如果是chrome,则会生成一个弹窗显示页面,且也会被拦截)。

百思不得其解,后在网上找了很久资料才搞清楚,是浏览器的广告拦截功能在作祟:

1、  一般情况下,如果在js中调用window.open()函数去打开一个新tab页,浏览器会进行拦截,认为打开的是一个广告页。

2、  所以如果不想让浏览器拦截,可以将这个函数改为用户点击时触发,这样浏览器就认为是用户想访问这个页面,而不是你直接弹出给用户。

3、  即使是用户点击事件,如果在一次事件里调用多次window.open()函数,则只有第一次被当作正常打开,之后的还是会被当作广告页。

4、  如果在点击事件里有ajax调用,window.open()在回调函数里执行,则浏览器仍然认为是js调用并当作广告拦截。除非ajax设置为同步模式。

5、  对于这种情况,可以使用如下代码解决:

var newWin = window.open();
$.ajax({url:xxx,success: function(data){newWin.location = data.url;}
});

可以使用var x =window.open(url);然后判断x == undefined来判断是否弹出成功。

其他场景:

有的下载功能是这样实现的,当用户点击某个按钮后,在后台生成一个地址返回给前端,前端在请求的回调方法中,通过window.open()打开这个链接

由于前端需要给后台发送异步请求,所以window.open()也会被拦截

可行的方法是,在回调之后,生成一个<a>标签,且href设置为下载地址,然后触发这个<a>标签的点击事件,注意:<a>标签一定要加一个download属性,否则还是会被拦截

window.open被浏览器拦截的问题(附解决方案)相关推荐

  1. 一个按钮触发多个a标签,只有一个可以下载,其他的window.open()被浏览器拦截...

    点击一个标签,触发多个a标签的下载事件,会出现只有一个文件下载,其他都被拦截, <!DOCTYPE html> <html lang="en"> <h ...

  2. window.open被浏览器拦截

    最近同事做的一个项目用到了window.open来打开新窗口,但是客户说有打不开网页的情况出现,我便帮他搜罗了一下window.open的资料,转载于此,对比与a标签的href链接跳转,后者没有那么多 ...

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

    function newWin(url, id) {var a = document.createElement('a');a.setAttribute('href', url);a.setAttri ...

  4. 解决safari浏览器拦截window.open

    现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,虽然在本地的环境可以对浏览器设置操作,但是对用户来说,不能要求用户都来通过拦截. 可以发现,当window.open为用户触 ...

  5. window.open浏览器弹出新窗口被拦截—原因分析和解决方案

    最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,但是对用户 ...

  6. html 弹窗被拦截,window.open()弹窗被浏览器拦截的解决方法

    本篇文章给大家带来的内容是关于window.open()弹窗被浏览器拦截的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么情况下会弹窗被拦截 当window.open为用 ...

  7. window.open打开新窗口被浏览器拦截的处理方法

    一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...

  8. window.open(url)打开链接被浏览器拦截解决方案

    H5下载发票是跳一个后端返回的链接,但直接用window.open有些会被浏览器(Safari)拦截 在axios中进行window.open会被浏览器拦截 法1:但用户自己点击的链接不会,可以创建a ...

  9. Angular2项目中浏览器拦截弹出窗口的解决方法

    Angular2项目中浏览器拦截弹出窗口的解决方法 为什么把项目是Angular2的放到了前边? 因为正常也页面网上已经很多解决方案.请自行百度或Google. 现象:当window.open为用户触 ...

最新文章

  1. tomcat 默认150连接数怎么支持几万大并发的?集群?
  2. WinForm 应用程序中开启新的进程及控制
  3. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)
  4. 数据流图 系统流程图 程序流程图 系统结构图联系与区别
  5. 运行shell脚本报错:“syntax error near unexpected token fi 的解决方法
  6. presume_presume是什么意思_presume中文意思_presume英译汉_英汉词典
  7. Python3批量转换文本文件编码
  8. mysql 5.7 无法启动 服务没有报告任何错误
  9. 【转】IDEA类和方法注释模板设置(非常详细)
  10. ll和du显示的文件大小不一致问题研究
  11. linux国际象棋,国际象棋通用引擎协议
  12. Android中关于Manifest的权限注册问题
  13. selenium自动化测试-鼠标键盘操作
  14. 提取最后一个星号后的数字
  15. 领航云计算发展风向标,亚马逊云科技的这些硬核布局值得关注
  16. matlab——遗传算法中的选择,交叉,变异等一系列问题解析(一)
  17. PS186:你给我翻译翻译什么叫做惊喜
  18. 卡尔曼滤波引出的RTS平滑
  19. 先锋机器人学习笔记_1-4 Pioneer SDK与VS2010编程配置
  20. MYSQL截取小数部分和获取小数位数,只查询带小数的数据,和substring_index函数用法,LENGTH函数用法

热门文章

  1. 有jar包直接加密tcp请求报文_干货 | 终于有人能把TCP/IP 协议讲明白了!
  2. 处理音视频合并的简单方法
  3. PMBOK泛读(第六章) - 项目进度管理
  4. 进厂手册:Git 学习笔记(详解命令)
  5. 【职场进阶】对教培行业新人,你有什么忠告?
  6. 基于51单片机的产品数量自动计量系统protues仿真
  7. 详解 Linux操作系统的目录结构
  8. Python爬虫笔记——正则表达式
  9. 犀牛软件无边框编辑设计,提高模型中的工作速度
  10. Excel标题如何居中不影响调整列?