IOS WKWebView文件上传失败求助:选图后返回首页无上传动作
首先帮你拆解下日志:[MC] Reading from private effective user settings属于系统级日志,完全可以忽略,不影响功能;真正的问题根源是PlugInKit Code=13 "query cancelled"这个错误,它直接导致了选择图片后WebView异常跳转回首页的现象。
下面是几个针对性的解决方案,你可以逐一排查验证:
必须实现WKUIDelegate的文件选择代理方法
WKWebView不会默认弹出系统的图片/文件选择器,如果你没实现WKUIDelegate的runOpenPanelWithParameters:initiatedByFrame:completionHandler:方法,当网页触发文件选择操作时,系统的扩展查询会被直接取消,就会出现Code=13的错误,甚至触发WebView页面重置。给你一段示例代码参考:
- (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> * _Nullable))completionHandler { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; picker.delegate = self; // 保存回调block,选中图片后传递给WebView self.imagePickerCompletion = completionHandler; [self presentViewController:picker animated:YES completion:nil]; } // 实现图片选择器的回调逻辑 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info { NSURL *imageURL = info[UIImagePickerControllerImageURL]; if (self.imagePickerCompletion) { self.imagePickerCompletion(@[imageURL]); self.imagePickerCompletion = nil; } [picker dismissViewControllerAnimated:YES completion:nil]; }别忘了给你的WKWebView设置
UIDelegate(webView.UIDelegate = self;),否则代理方法根本不会被触发。检查Info.plist的权限配置
确保你已经在Info.plist中添加了照片库访问权限的描述:NSPhotoLibraryUsageDescription:填写应用需要访问照片库的原因(比如"需要上传图片用于发布动态")
如果你的应用支持拍照上传,还要额外添加NSCameraUsageDescription。权限缺失会导致图片选择器无法正常打开,间接引发WebView的异常行为。
排查WebView的生命周期问题
检查你在弹出图片选择器前后,有没有误触发WebView的reload、loadRequest方法,或者重新初始化了WKWebView实例。比如有些开发者会在页面跳转逻辑里错误重置WebView,导致选择图片后直接回到首页。验证网页端的上传逻辑
偶尔问题也可能出在网页代码上:比如文件选择后,网页有没有正确处理文件对象?会不会因为文件格式、大小不符合要求触发了页面跳转?你可以先在Safari中测试网页的上传功能,如果Safari里正常,那问题肯定出在Native端的WKWebView配置上。
内容的提问来源于stack exchange,提问作者AlvaroCryptogram

