【bug解决】ios safari浏览器使用window.open失效

前言

在移动端开发中,我们做一些下载文件的功能,经常要用到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;
});

大功告成!

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端阿彬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值