我最近做一个下载文件需求时,使用 ajax 异步请求成功后新开窗口打开下载url,使用的是 window.open() 方法,发现浏览器会拦截,在网上找了很久的原因才知道:因为该操作并不是用户主动触发的,所以浏览器认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger(‘click’)),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截。
在网上找了很多解决办法,以下两个是最有效的,解决了我的问题:
1、异步改为同步
即:async: false,把 window.open() 写在 ajax 函数外面,比如:定义一个flag,请求成功的时候赋值true,失败赋值false,当flag为true时调用 window.open() ,总之就是要把 window.open() 放在ajax外面执行。2、将新开窗口指向为一个对象,然后修改对象的 url
|
|