在Web编程中,使用JS在新窗口打开页面的时候,会遇到被浏览器拦截的情况。
场景:
原因: 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。常见的场景如下:
(1)非用户操作页面产生的跳转,如进入页面直接跳转:
(2)尽管是用户操作页面产生的跳转,但产生了异步逻辑(我们项目中常见的就是ajax回调中使用跳转)。例如点击事件中使用了定时器:
解决方案
针对场景一,将非用户操作引起的跳转改为用户操作触发的同步跳转,比如通过click事件
针对场景二,预先跳转到一个空页面,等待异步操作完成之后再赋值新窗口的链接
这种方案会导致等待五秒的空白页面时间,因此不太适合长时间等待回调的场景,针对这种场景,我们可以在异步回调执行后,弹出一个弹窗让用户点击后再执行跳转,将其转化为用户操作引起的同步跳转: