确实做手机端的项目,可以学习到新的东西,但是这也很头疼,比如这个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开发的注意事项》吧。