项目中遇到的小问题,记录一下。
以前没留意过弹窗问题(不是alert,是window.open打开新网页),一般的操作是事件之后直接触发弹窗,比如按钮点击后弹,都是没有问题的。项目中有个需要确认请求(Vue.js+axios,axios默认异步)结果后才能确定是否弹窗,或者是弹窗到某个页面,而结果是弹窗屡屡被浏览器拦截禁止,不明所以,后来经过本地操作验证,对比才想到是否是同异步的问题,以基础的请求作实验;
以JQ中的ajax中为例,ajax中默认是异步的,当然里面有个参数可以设置为同步,也就是async参数,如下示例:
$.ajax({ url:"http://www.easy-mock.com/mock/5a12901c46ed8d690fdd9b53/example/query", //请求的url地址 dataType:"json", //返回格式为json async:true,//请求是否异步,默认为异步 data:{"id":"value"}, //参数值 type:"GET", //请求方式 get 或者post beforeSend:function(){ //请求前的处理 }, success:function(req){ //请求成功时处理 }, complete:function(){ //请求完成的处理 }, error:function(){ //请求出错处理 } });
实例中将async值改为false就可以了,其他请求插件根据实际情况更改,Chrome也对这个事情做出了说明:
https://support.google.com/chrome/answer/95472?co=GENIE.Platform%3DDesktop&hl=en&oco=1
或者直接到浏览器设置中设定:chrome://settings/content/popups,这里以Chrome为例子,注意其他浏览器有异同;
也就是浏览器会禁止自动弹窗的行为,异步过程中获取结果的过程,浏览器无法判定是否是用户意愿行为吧,可以看做是浏览器保护用户或者维护浏览器的一种策略吧,因为自动弹窗往往会被非法用到弹广告弹游戏等途径上,跟浏览器同源策略是一样的;