window.open()弹出窗口防止被禁
window.open(),顾名思义,是指在当前浏览器窗口弹出另一个浏览器窗口。
因为多种原因,浏览对window.open
弹出的窗口做了多方限制。限制不同,肯定会造成各浏览器弹出窗口的差异。
大部分浏览器会把由javascript弹出的窗口阻止(blocked)掉,得到用户的允许后,打开相应的弹窗。
现在的问题是,用户点击按钮,做相关的ajax请求,由于响应时间过长,当数据回来时,浏览器已经不认为这是在用户主导操作时间范畴内,而blocked掉弹出窗口。
解决方法:
由于window.open方法会返回一个指向新窗口的引用。可以通过这个引用对新开的窗口进行操作。
所以在用户点击btn时,第一时间弹出窗口,获取弹出窗口的引用。然后进行ajax数据请求,当数据返回时,对请开窗口url地址进行设置 :
newWindow.location = url;
- call window.open just before calling $.ajax and save window reference:
var newWindow = window.open("loading.html");//这里也许要增加一个loading.html的过渡页面 - 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');
分类:
javascript
标签:
window.open
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述