wkwebview 预览文件_WKWebview+H5获取相册图片实现预览及上传

本文介绍了在iOS应用中,使用WKWebview和H5交互实现图片选择、预览和上传的功能。重点在于解决WKWebview在不同iOS版本下预览图片的策略,包括自定义协议头、利用NSURLProtocol拦截资源请求,以及在iOS11及以上版本使用WKURLSchemeHandler。此外,还提及了将图片转换为base64数据以便上传到服务器的流程。
摘要由CSDN通过智能技术生成

这个功能已经写完快两个月了,马上要把这个H5功能改成原生的,也就是说之前的代码暂时没有别的地方需要用,所以准备匿了,现在来分享一下过程应该不算晚

说一下这个功能在Android的Webview上实现思路是一样的,但是iOS这边稍微麻烦了一点,主要是因为UIWebview和WKWebview的区别以及iOS的版本问题,因此需要兼容两种办法——iOS11.*以前和以后

需求:在WKWebview的H5页面中需要选择图片(调用自定义的图片选择器而不是系统相册)然后再页面中预览,点击上传按钮后开始上传(由H5进行上传)

语言用的是最新的Swift4.0,配合之前的一篇文章WKWebview与Javascript互相调用传参(Swift)服用更佳

Part 1. 获取图片并在H5中预览

首先第一步是H5中点击选择图片按钮唤起自定义图片选择器,这个是Javascript和原生的交互就不再提了

唤起了自定义图片选择器后选择完图片获取的图片数据是UIImage格式的(系统相册返回的也是)这玩意儿是无法直接返回给H5的,那么我们发现选择图片返回的还有一个Path信息(图片在手机系统里的物理路径)这个Path信息唯一的毛病是系统限制无法读取的,因为安全权限的问题,所以我们必须要把它存在应用程序的沙盒路径里。

你非要跟我犟我也没办法,如果你碰到Promise dined的问题的时候回来看这里

存储图片的代码let fullPath = URL(fileURLWithPath: NSHomeDirectory().appending("/Documents/WKWebviewTmpImg/").appending(filename), isDirectory: false)

try! UIImageJPEGRepresentatio

本demo是WKWebView的基本使用和交互 ,实现了原生调用js的方法、js调用原生的方法、通过拦截进行交互的方法;修改内容 加入沙盒 / /加载沙盒 不带参数 // NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // NSString * path = [paths objectAtIndex:0]; // path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; // NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"file://%@",path] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]] relativeToURL:[NSURL fileURLWithPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject]]; // [self.wkView loadFileURL:url allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; // 带参数 /* NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * path = [paths objectAtIndex:0]; path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; NSURL * url = [NSURL fileURLWithPath:path isDirectory:NO]; NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; [queryItemArray addObject:[NSURLQueryItem queryItemWithName:@"version" value:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]]; [urlComponents setQueryItems:queryItemArray]; [self.wkView loadFileURL:urlComponents.URL allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值