window.open()弹出窗口防止被禁

简介: window.open(),顾名思义,是指在当前浏览器窗口弹出另一个浏览器窗口。因为多种原因,浏览对window.open弹出的窗口做了多方限制。限制不同,肯定会造成各浏览器弹出窗口的差异。大部分浏览器会把由javascript弹出的窗口阻止(blocked)掉,得到用户的允许后,打开相应的弹窗。

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');

相关文章
|
12天前
|
iOS开发
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
14 2
mac系统JavaFX的Alert没有新窗口弹出
mac系统JavaFX的Alert没有新窗口弹出
80 0
mac系统JavaFX的Alert没有新窗口弹出
|
JavaScript API
onbeforeunload事件之关闭浏览器之前的提示弹框
onbeforeunload事件之关闭浏览器之前的提示弹框
453 0
SwiftUI—如何快速打开一个警告窗口
SwiftUI—如何快速打开一个警告窗口
192 0
SwiftUI—如何快速打开一个警告窗口
SwiftUI—如何快速打开一个模态窗口
SwiftUI—如何快速打开一个模态窗口
392 0
SwiftUI—如何快速打开一个模态窗口
使用JQ实现点击其他区域关闭窗口的功能
使用JQ实现点击其他区域关闭窗口的功能
|
图形学 Windows
Unity调用Window提示框Yes/No(英文提示窗)
Unity调用Windows弹提示框 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar...
1666 0