• uniapp在iOS上运行时选择网络后app依然出现白屏的解决方法
  • 发布于 2个月前
  • 528 热度
    0 评论
现象描述:
app(iOS)第一次真机运行的时候,都会弹出允许使用网络请求方式(图1),然而,选择网络后app依然出现白屏的显现,那是因为用户点击“允许”之前,所有网络请求都是被禁止的,而且在点击“允许”之前,程序已经运行了网络请求,这个时候请求失败的,所以即使允许依然是处于白屏的现象。

百度上可以搜到一些解决方案,但大多数都是原生iOS开发的解决方案,并没有uniapp的。
网上给的解决方案有:
1.延时请求
2.允许用户手动重新请求
3.稍后重新请求。网络框架如果做了请求失败时,定时重新请求的处理,应该也能解决首次请求失败的问题
4.监听网络状态,

方案1,肯定不合适,想都不要想
方案2,还需要重新布局,排除在外
方案3,请求失败时,重新请求,可以考虑一下
方案4,监听状态,当用户选择了使用网络的时候,再次请求,也可以考虑

写这篇文章的时候,我选的方案是方案3
相关代码
// 堆代码 duidaima.com
// 获取网络类型
uni.getNetworkType({
    success: function (res) {
        console.log(res.networkType);
        //TODO:判断网络类型,执行请求后端接口操作,还是延时重新调用自己该方法
        // 自己实现一下吧
    }
});
当时没有选方案4,方案4固然可以解决问题,当切换网络的时候,即(用户允许使用数据的时候,就会再次请求),第二次进入的时候,该监听事件还是写着,但这问题再也不会出现了,即这个监听事件也就没有存在的意义了,那么就需要取消监听,而这个取消监听的代码写到哪里都感觉不合适。综合下来,没有选该方案,而是使用定时器的方案来做。

还有一个细节要注意,外链图片也是要走网络请求的,当无网络的时候,图片不会显示,当我们在获取网络类型的时候,再去对图片赋值,图片并没有加载。原因的话,看过我分享的vue2的响应式原理的同学就会知道,当监听的数据中新值和旧值相同的时候,源码中直接return了,也就不会执行后面的修改视图的操作了。

那要怎么办的?

简单:初始化的时候为空字符串即可。


还有一点很坑:想要多次测试,手机必须还原,抹掉所有的内容和设置,才会出现 图1 的情况。
今天的文章就写了下思路,我想小伙伴们遇到这个问题后,看到这些思路也能写的出来。
用户评论