博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
window.open()弹出窗口防止被禁
阅读量:5152 次
发布时间:2019-06-13

本文共 897 字,大约阅读时间需要 2 分钟。

window.open(),顾名思义,是指在当前浏览器窗口弹出另一个浏览器窗口。

因为多种原因,浏览对window.open弹出的窗口做了多方限制。限制不同,肯定会造成各浏览器弹出窗口的差异。

大部分浏览器会把由javascript弹出的窗口阻止(blocked)掉,得到用户的允许后,打开相应的弹窗。

现在的问题是,用户点击按钮,做相关的ajax请求,由于响应时间过长,当数据回来时,浏览器已经不认为这是在用户主导操作时间范畴内,而blocked掉弹出窗口。

解决方法:

由于window.open方法会返回一个指向新窗口的引用。可以通过这个引用对新开的窗口进行操作。
所以在用户点击btn时,第一时间弹出窗口,获取弹出窗口的引用。然后进行ajax数据请求,当数据返回时,对请开窗口url地址进行设置 :
newWindow.location = url;
1) call window.open just before calling $.ajax and save window reference:
var newWindow = window.open("loading.html");//这里也许要增加一个loading.html的过渡页面
2) on callback set location property of the saved window reference:
newWindow.location = url;

当然这里存在一定的问题:当ajax请求的数据出错时,新弹出的窗口获取不到最新数据而出错。

解决方法就是当请求完成且出错时,让newWindow跳转到出错页面。

又或者loading.html页自己做一个定时器,如果半分钟内没有urlchange,就自行跳错。

如果这样还不行,只能

alert('You have a popup blocker enabled. Please allow popups for company.com');

转载于:https://www.cnblogs.com/flowerszhong/p/4477912.html

你可能感兴趣的文章
JavaScript---Promise
查看>>
暖暖的感动
查看>>
[转] C语言的谜题
查看>>
Java中的日期和时间
查看>>
禁用windows2000.2003启动时的CTRL+ALT+DEL
查看>>
Django基于admin的stark组件创建(一)
查看>>
快速幂 模板及应用
查看>>
批处理/DOS命令删除文件夹下某类型的文件
查看>>
模板 - 数学 - 矩阵快速幂
查看>>
优秀的持久层框架Mybatis,连接数据库快人一步
查看>>
线段树 延迟更新
查看>>
CentOS的IP配置专题
查看>>
基于WCF大型分布式系统的架构设计
查看>>
Cisco & H3C 交换机 DHCP 中继
查看>>
人脸识别技术及应用,二次开发了解一下
查看>>
理解CSS中的BFC(块级可视化上下文)[译]
查看>>
身份证号码的合法性校验
查看>>
Python基础--通用序列操作
查看>>
[CERC2017]Intrinsic Interval[scc+线段树优化建图]
查看>>
DevExpress DXperience Universal 11.1.6 下载+源码+编译+汉化流程+升级+替换强名
查看>>