而由ajax或定时器执行的弹窗均为非用户触发

时间:2022-01-10 07:47:13

window.open( url )是常用的打开新页面的要领,,一般都没有问题,但是如果在ajax回调要领里面使用就会被浏览器拦截,因为在浏览器安适机制中,页面弹窗必需是由用户触发的才是安适弹窗,好比说绑定的onclick(),onchange()事件触发,而由ajax或按时器执行的弹窗均为非用户触发,所以会被浏览器安适机制(其他安适软件)理解为非安适弹窗而被拦截。

解决步伐一:

<div>点击我呀</div> function testFunc() { var openWindow = window.open(); $.ajax({ url: ‘url‘, type: ‘POST‘, dataType: ‘json‘, data: {param1: ‘value1‘}, success: function(data){ openWindow.location = data.url; //在重定向页面链接 } }) }

缺陷:从倡议弹窗,到后面的重定向(指定跳转地点)必需是一条现行流程,如果半途需要用户做交互的校验,那此要领就会有问题,会跳转至一个空白页面。好比:

$.ajax({ url: ‘url‘, type: ‘POST‘, dataType: ‘json‘, data: {param1: ‘value1‘}, success: function(data){ if(window.confirm(‘你确定要跳转吗?‘)) { //用户确认后才华进行跳转 openWindow.location=‘‘; } } })

解决要领二:

手动将ajax的请求改为同步请求(async: false),此处就不粘代码了,可自行测试。

缺陷:根基上能解决浏览器的拦截问题,但是解决不了安适软件的拦截

window.open()打开新窗口被拦截