ios window.open失效

  • A+
所属分类:vue

在移动端开发中,我们做一些下载文件的功能,经常要用到window.open方法。也就是后端直接返回给你个下载的路径,如果你都浏览器支持预览就会先打开预览,然后自己手动下载,不支持则直接下载。

但是再ios系统里,有时会出现window.open方法失效的问题。明明后端返回了地址,但是使用window.open却没有动静。这是为什么呢?

原因

因为safari浏览器有一些安全策略,禁止在回调函数中执行window.open方法,以防页面不断弹出窗口。

例如:

有效打开如果你是提前获取了文件地址,然后通过点击触发下载就可以生效:

window.open(url)

无效打开如果你是先发送请求获取地址,然后请求的成功回调里触发下载就不会生效:

axios.get(‘xxx’).then((url) => {

window.open(url, ‘_blank’);

});

解决

方法1. 先打开一个空白页,再更新它的地址

let oWindow = window.open(’’, ‘_blank’);

axios.get(‘xxx’).then((url) => {

oWindow .location = url;

});

方法2. 超链接打开

axios.get(‘xxx’).then((url) => {

let a = document.createElement(‘a’);

a.setAttribute(‘href’, url);

document.body.appendChild(dom);

a.click();

a.remove()

});

方法3. 使用 window.location

axios.get(‘xxx’).then((url) => {

window.location.href = url;

});

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: