最近公司需求涉及接入一个H5页面,功能有文件选择上传,遇到点坑,记录一下。
具体问题是h5直接调用原生的文件选择器,文件选择完成后,页面出现空白。
image.png
image.png
并有如下错误信息输出:
image.png
从错误信息看,看似文件访问权限除了问题,于是从文件权限入手,如info配置文件对比、sign ability,均无效果。
于是查看图层发现白屏的时候,实际上是Webview已被移除。自定义webview,重写removeFromSuperview方法,打上断点拦截发现,系统居然调用了当前控制器的dismiss方法:
image.png
image.png
到这里觉得可能是跟present出来的控制器有关系,改成push出来,果然正常了,但交互效果无法满足设计师需要的效果,尝试使用present,修改modalPresentationStyle,但只有currentContext能选择文件正常,但效果其实跟push没多大区别。这也再次确认确实是present出来的关系。
到这里想通过拦截控制器的dismiss方法,判断是UIDocunmentPickerViewController就dismiss,否则保留父控制器的行为
image.png
然而不幸的是,选择文件确定后没有白屏,但不能再次选择文件,显然是webview的进程已经被杀掉了,这种方法不能从根本解决问题。
到这里考虑包装一个NavVC,然后preset 它,这样系统的dismiss影响不了它
image.png
就这样完美解决了问题