关于window.open()在苹果(ios)系统下无法正常执行

原创 野人  2021-11-15 20:00  阅读 14 次

确实做手机端的项目,可以学习到新的东西,但是这也很头疼,比如这个window.open()的方法,在其他系统(安卓这些),都是正常运行的,偏偏苹果就搞了个特殊,说只要不是人为触发的window.open(),那默认就是禁止了,也就导致了没有办法使用了。

而一般遇到这类问题,我们首先排查的是自己代码本身是否存在问题,但是排查了一番了并无任何的报错,反正就是没有反应的,我觉得做coder应该最怕的就是这种没有任何报错的bug。

然后就是一顿调试+搜索引擎了,最终才知道原来就是苹果系统自己搞的鬼,也就是前面有说过的,只要不是人为触发的window.open(),那默认就是禁止了。

什么叫不是人为触发/是认为触发的,举个例子:

<button onclick="window.open(url)">是有人主动点击我就打开新的窗口</button>

//2秒后,触发打开新窗口,这种就是不行的
setTimeout(()=>{
  window.open(url)
},2000)

//请求接口后,成功回调后打开新窗口也是不行的。
fetch(url).then(res=>{
  window.open(url);
})

所以,看完这些列子,想必大伙们,因为是明白了,对于苹果系统这种的限制,真的只能是自己踩过坑后才知道,所以后续打算把这些坑都整合到一篇文章中,就叫《前端h5开发的注意事项》吧。

本文地址:http://www.yerenwz.com/5150.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论